Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2010, 19:14   #1
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию Призрачные контейнеры?

Допустим у меня есть
vector<pair<string, int> > base;

Мне нужно его выдавать как отсортированным по первому значению, так и по второму.

Можно ли иметь ещё пару
vector<pair<string, int> > ghost;
но так что-бы их элементы были значениями базового, вектора? И изменения в базовом векторе приводили к изменениям в его призраках.

То есть что-бы я мог один призрак держать отсортированным по первому значению пары, второй по второму. И мог каждый из них быстренько досортировать при изменениях базового вектора. А вносить изменения через базовый вектор. Тоесть и волки целы и овцы сыты.
the_deer_one вне форума Ответить с цитированием
Старый 29.08.2010, 19:28   #2
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Можно вызывать функцию, корректирующую вектора после каждого изменения в базовом векторе, а можнопопробовать так:
Код:
vector<pair<string, int>&> ghost;
Код:
vector<pair<string, int>*> ghost;
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 29.08.2010, 19:30   #3
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

А выдавать именно в таком виде: vector<pair<string, int> > ?

Syuf, в векторах нельзя держать ссылки.

Последний раз редактировалось Stilet; 30.08.2010 в 10:13.
Carbon вне форума Ответить с цитированием
Старый 29.08.2010, 19:45   #4
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Carbon
Цитата:
А выдавать именно в таком виде: vector<pair<string, int> > ?
Вообще в таком:
vector<pair<vector<string>, int> > base;

P.S. Блин, казалось бы такая лёгкая задача.
P.P.S. Я наверно не буду пока этим запариваться, а сделаю по тупому.
В одном контейнере набор уникальных фраз
Во втором отображение-счётчик.
А третий получу просто свопнув и отсортировав второй.
Дёшево и сердито.
the_deer_one вне форума Ответить с цитированием
Старый 29.08.2010, 21:09   #5
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Цитата:
Syuf, в векторах нельзя держать ссылки.
ОК, буду знать - я с STL редко общаюсь, предпочитаю коллекции MFC. А указатели на pair<string, int>?
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 29.08.2010, 21:11   #6
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Указатели можно. Единственное, что нельзя, так это ссылки (обычные и константные) и объекты классов без конструкторов копирования.
Carbon вне форума Ответить с цитированием
Старый 30.08.2010, 09:43   #7
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Цитата:
классов без конструкторов копирования
А версия кк по умолчанию?
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 30.08.2010, 10:33   #8
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Цитата:
Сообщение от Syuf Посмотреть сообщение
А версия кк по умолчанию?
Хах. Естественно можно. Имел в виду с закрытыми конструкторами копирования.
Carbon вне форума Ответить с цитированием
Старый 30.08.2010, 11:52   #9
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

А, ну это ясно, я просто не понял.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 30.08.2010, 16:17   #10
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Так, гуры. Почему этот код не работает?

Код:
vector<pair<string, int>* > ghost;
ghost.push_back( &pair<string, int>("green", 9) );
cout << ghost[0]->first << endl;
P.S.
Если сначала выделить память под переменную то всё пашет.
pair<string, int> * para = new pair<string, int>("green", 9);
Это связано с тем что эта самая пара находится в константной области?

P.P.S.
Ага, можно вот так вот:
ghost.push_back( new pair<string, int>("green", 9) );

Последний раз редактировалось the_deer_one; 30.08.2010 в 16:22.
the_deer_one вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Контейнеры С++ Helen09 Помощь студентам 0 29.05.2010 13:01
[C++] контейнеры классы и работа с текстом ArniLand Общие вопросы C/C++ 6 08.03.2010 02:25
Совместимы ли вообще TImage и стандартные контейнеры? Гром Общие вопросы C/C++ 1 03.10.2009 22:42
Контейнеры Crucian Общие вопросы C/C++ 1 22.09.2007 22:02