Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.75
Visary_Master
-154 / 16 / 4
Регистрация: 01.12.2010
Сообщений: 297
#1

STL, deque, pair - C++

31.01.2012, 13:30. Просмотров 4515. Ответов 60
Метки нет (Все метки)

Здравствуйте, помогите пожалуйста разобраться.

Есть такая очередь:

C++
1
deque<pair<int, timeval> > last_query
Как работать с такой очередью?
Как пройтись по всем элементам такой очереди?
Как найти минимальный через timeval? // если можно через метод find
Как добавить элемент в очередь, и удалить.
Можно и пройтись по такой очереди с помощью итератора?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.01.2012, 13:30     STL, deque, pair
Посмотрите здесь:

STL deque - C++
Устройство, основные операции и их стоимость, особенности использования deque. Ни где не могу найти стоимость выполнения основных...

STL, deque Перераспределение памяти - C++
Есть книга, в ней написано такое о деке Можно ли пример увидеть, а-то чего-то непонятно. Пример когда все итераторы из-за...

Как реализован deque в STL ? - C++
Как реализован deque в STL ? Насколько я понимаю условно все разделяется на блок с адресами и блоки с данными. Есть какие-то...

Контейнер deque - C++
Задание:(используя контейнер deque) ввести последовательность натуральных чисел,у конце которой 0.Не сохраняя всей последовательности в...

deque<float> - C++
Создать контейнер deque и заполнить его типом данных &lt;float&gt;, вывести на экран. Удалив одни элементы и заменив другие вывести на экран...

Compair deque - C++
есть два списка. Теперь мне нужно сравнить элементы если х &lt;у то return (x+y) . я так думаю надо результат в 3 список записать как мне...

std::deque - C++
Как известно при добавлении в конец вектора элементов(и не только в конец) может возникнуть перераспределение памяти что переместит данные...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
31.01.2012, 14:33     STL, deque, pair #2
Цитата Сообщение от Visary_Master Посмотреть сообщение
Как пройтись по всем элементам такой очереди?
C++
1
2
for(auto p = begin(last_query); p != end(last_query); p++)
    std::cout << p->first << " " << p->second << std::endl;
Добавлено через 33 секунды
Цитата Сообщение от Visary_Master Посмотреть сообщение
Как найти минимальный через timeval? // если можно через метод find
что у нас timeval?

Добавлено через 3 минуты
Цитата Сообщение от Visary_Master Посмотреть сообщение
Как добавить элемент в очередь, и удалить
C++
1
push_back(), push_front(), insert(begin , end),
C++
1
pop_back(), pop_front(), erase(iter i)
Добавлено через 51 секунду
Цитата Сообщение от Visary_Master Посмотреть сообщение
Можно и пройтись по такой очереди с помощью итератора?
up up up

Добавлено через 23 секунды
Цитата Сообщение от Visary_Master Посмотреть сообщение
Как работать с такой очередью?
все выше
Visary_Master
-154 / 16 / 4
Регистрация: 01.12.2010
Сообщений: 297
31.01.2012, 15:09  [ТС]     STL, deque, pair #3
C++
1
2
timeval tv;
gettimeofday(&tv, NULL);
Так буду использовать примерно.
библиотеку не помню, сейчас на винде
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
31.01.2012, 15:38     STL, deque, pair #4
Visary_Master, find_if(), но лучше сразу min с предикатом
Visary_Master
-154 / 16 / 4
Регистрация: 01.12.2010
Сообщений: 297
31.01.2012, 20:07  [ТС]     STL, deque, pair #5
Цитата Сообщение от Mayonez Посмотреть сообщение
C++
1
2
for(auto p = begin(last_query); p != end(last_query); p++)
     std::cout << p->first << " " << p->second << std::endl;
без авто можешь расписать?
Просто я новый стандарт не смотрел серьезно.

знаю, что с предикатом в queue не получилось бы. А deque получиться? Как конкретно использовать этот предикат, просто проблема, какие параметры в этот метод передавать.
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
31.01.2012, 20:24     STL, deque, pair #6
Цитата Сообщение от Visary_Master Посмотреть сообщение
без авто можешь расписать?
C++
1
2
for(deque<pair<int, timeval> >::iterator p = last_query.begin(); p != last_query.end(); p++)
     std::cout << p->first << " " << p->second << std::endl;
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
31.01.2012, 20:45     STL, deque, pair #7
Visary_Master, Вот нахождение минимального элемента. Как видите, нужен оператор сравнения.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
#include <deque>
#include <utility>
#include <algorithm>
#include <ctime>
#include <cstdlib>
 
class TimeVal
{
    int a;
    
public:
    TimeVal(): a(std::rand() % 21)
    {
        
    }
    
    TimeVal(const int& _a): a(_a)
    {
        
    }
    
    bool operator < (const TimeVal& tv) const
    {
        return a < tv.a;
    }
    
    friend std::ostream& operator << (std::ostream& s, const TimeVal& t)
    {
        s << t.a;
        return s;
    }
};
 
template <class T>
struct Comp
{
    bool operator () (const T& f, const T& l)
    {
        return f.second < l.second;
    }
};
 
int main()
{
    std::srand(std::time(0));
    std::deque<std::pair<int, TimeVal> > dq;
    dq.push_back(std::pair<int, TimeVal>(1, TimeVal()));
    dq.push_back(std::pair<int, TimeVal>(2, TimeVal()));
    dq.push_back(std::pair<int, TimeVal>(3, TimeVal()));
    for
    (
        std::deque<std::pair<int, TimeVal> >::iterator it = dq.begin();
        it != dq.end();
        ++it
    )
        std::cout << it -> first << ' ' << it -> second << std::endl;
    
    std::deque
    <
        std::pair
        <
            int,
            TimeVal
        >
    >::iterator min =   std::min_element
                        (
                            dq.begin(),
                            dq.end(),
                            Comp
                            <
                                std::pair
                                <
                                    int,
                                    TimeVal
                                >
                            >()
                        );
    std::cout << min -> first << ' ' << min -> second << std::endl;
    return 0;
}
Без C++11.
Visary_Master
-154 / 16 / 4
Регистрация: 01.12.2010
Сообщений: 297
31.01.2012, 21:12  [ТС]     STL, deque, pair #8
Цитата Сообщение от soon Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class TimeVal
{
    int a;
public:
TimeVal(): a(std::rand() % 21)
{}
TimeVal(const int& _a): a(_a)
{}
bool operator < (const TimeVal& tv) const
{
         return a < tv.a;
}
friend std::ostream& operator << (std::ostream& s, const TimeVal& t)
{
          s << t.a;
          return s;
}
};
Хочу вот этой функцией воспользоваться:
http://linux.die.net/man/2/gettimeofday
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
31.01.2012, 21:17     STL, deque, pair #9
Visary_Master, Тогда перегружаете оператор сравнения с двумя параметрами.
Или в Comp перегружаете скобки, в которых вручную сравниваете 2 объекта. В этом случае можно не перегружать <
Visary_Master
-154 / 16 / 4
Регистрация: 01.12.2010
Сообщений: 297
31.01.2012, 21:24  [ТС]     STL, deque, pair #10
я просто параллельно завел тему:
Алгоритмы замещения страниц памяти(LRU, STL, gettimeofday)
мне предложили очередь из пар.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
31.01.2012, 21:36     STL, deque, pair #11
Visary_Master, а вопрос-то какой? Найти самый ранний элемент? Если да, то выше я показал как делать. Можно еще через лямбду, если допустимо использование C++11. Если нет, то какая проблема, я просто сути поста не уловил.
Visary_Master
-154 / 16 / 4
Регистрация: 01.12.2010
Сообщений: 297
31.01.2012, 22:46  [ТС]     STL, deque, pair #12
Цитата Сообщение от soon Посмотреть сообщение
Visary_Master, а вопрос-то какой? Найти самый ранний элемент? Если да, то выше я показал как делать. Можно еще через лямбду, если допустимо использование C++11. Если нет, то какая проблема, я просто сути поста не уловил.
Надо найти самое маленькое время(timeval), поменять ей время последнего обращения.
Сейчас попробую, может получится.

Добавлено через 21 минуту
C++
1
using namespace std;
Добавлено через 4 минуты
попробовал сделать так:

C++
1
2
deque<pair<int, timeval> > dq;
for(deque<pair<int, timeval> >::iterator j = dq.begin(); j != dq.end(); ++j)
не компилится

как же в STL просто все...
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
31.01.2012, 22:50     STL, deque, pair #13
Цитата Сообщение от Visary_Master Посмотреть сообщение
не компилится
Ошибки какие?

Цитата Сообщение от Visary_Master Посмотреть сообщение
Надо найти самое маленькое время(timeval), поменять ей время последнего обращения.
Пишете функтор для класса timeval и находите минимальное значение через min_element.
Visary_Master
-154 / 16 / 4
Регистрация: 01.12.2010
Сообщений: 297
31.01.2012, 22:53  [ТС]     STL, deque, pair #14
Цитата Сообщение от soon Посмотреть сообщение
Ошибки какие?
lab7_1.cpp:84:32: error: conflicting declaration ‘std::deque<std:air<int, timeval> > dq’
lab7_1.cpp:35:16: error: ‘dq’ has a previous declaration as ‘std::deque<int> dq’
lab7_1.cpp:87:64: error: conversion from ‘std::deque<int>::iterator’ to non-scalar type ‘std::deque<std:air<int, timeval> >::iterator’ requested
lab7_1.cpp:87:79: error: no match for ‘operator!=’ in ‘j != std::deque<_Tp, _Alloc>::end() [with _Tp = int, _Alloc = std::allocator<int>, std::deque<_Tp, _Alloc>::iterator = std::_Deque_iterator<int, int&, int*>]()’
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2012, 23:05     STL, deque, pair
Еще ссылки по теме:

vector, list, deque - C++
Пытаюсь разобраться, куда лучше какой контейнер применять, под какие задачи. Первый вопрос по списку: Сказано, что список удаляет любой...

Deque - сравнение элементов - C++
Пусть даны две очереди X и Y, содержащие вещественные числа. Из каждой очереди одновременно извлекается по одному числу x и y...

deque iterator not dereferencable - C++
итак программа должна считывать из файла данные об автобусных маршрутах (имя водителя, номер маршрута и т.д.). После этого сортировать...

Как работает std::deque? - C++
Пытаюсь разобраться в работе std-шного дека. Веб-серфинг дал следующее: Данные хранятся в куче небольшими блоками(массивами) в виде...

Собственный тип данных в deque - C++
Добрый день. Возникла проблема. Надо очистить объект и вписать значения. obj.clear() не работает, как я понимаю он вызывает функцию из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
31.01.2012, 23:05     STL, deque, pair #15
Цитата Сообщение от Visary_Master Посмотреть сообщение
error: ‘dq’ has a previous declaration as ‘std::deque<int> dq
Раньше его объявили.
Yandex
Объявления
31.01.2012, 23:05     STL, deque, pair
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru