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

Требуется собрать кучу object в один контейнер и искать их по object_name - C++

Восстановить пароль Регистрация
 
 
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,963
23.07.2014, 14:09     Требуется собрать кучу object в один контейнер и искать их по object_name #1
Пусть дана структура вида:
C++
1
2
3
4
5
6
7
8
struct object
{
    object(const std::string&_object_name):object_name(_object_name){}
    bool operator<(const object&o)const{return object_name<o.object_name;}
    bool operator<(const std::string&str)const{return object_name<str;}
    std::string object_name;
    char some_data[100500];
};
Требуется собрать кучу object в один контейнер и искать их по object_name. При этом хочется соблюдать следующие условия:
1) У object должен сохраниться доступ к своему object_name.
2) object_name не должен дублироваться в каких-то внутренних индексах контейнера (потому что возможен алгоритм обходящийся без дублирования). То есть, std::map хранящий ключ сортировки отдельно не подходит.
3) find(object_name) не должно требовать преобразования object_name из std::string в object (там some_data на 100500 байт).
4) Вставка нового элемента не должна делать ссылки на существующие элементы невалидными (отсортированный вектор object не подойдет).

Реализуемо ли это какими-то готовыми библиотеками (например, boost)? И ясно, вроде, что алгоритмически это ничем принципиально не отличается от std::set. Но как я понимаю, find в std::set<object> принимает только аргумент типа object. Пусть даже есть operator< позволяющий сравнивать object напрямую с std::string.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2014, 14:09     Требуется собрать кучу object в один контейнер и искать их по object_name
Посмотрите здесь:

C++ массив указателей на кучу векторов
C++ Нужно последовательно собрать их в один динамический массив.
про кучу и не кучу C++
C++ необходимо в шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера
Найти, какое минимальное число поворотов на один зубчик требуется сделать, чтобы шестеренки вернулись в исходное состояние C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,284
23.07.2014, 19:19     Требуется собрать кучу object в один контейнер и искать их по object_name #21
Цитата Сообщение от Renji Посмотреть сообщение
C++
1
2
3
4
struct hash_value{
 int operator()(const object&str)const{return str.object_name.size();}
 int operator()(const std::string&str)const{return str.size();}
};
воу-воу-воу, ты же надеюсь не считаешь так хэши и привел этот код только для примера уровня компилируется/не компилируется?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2014, 19:23     Требуется собрать кучу object в один контейнер и искать их по object_name
Еще ссылки по теме:

Чем дальше в лес, тем больше дров. Не соображу, как собрать в кучу C++
C++ Как можно теперь взять и собрать группу из 4-х байтов в один float?
Как собрать файлы в кучу? C++

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

Или воспользуйтесь поиском по форуму:
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,963
23.07.2014, 19:23  [ТС]     Требуется собрать кучу object в один контейнер и искать их по object_name #22
воу-воу-воу, ты же надеюсь не считаешь так хэши и привел этот код только для примера уровня компилируется/не компилируется?
Разумеется. Для тестового примера нет смысла делать что-то более сложное чем "лишь бы хоть что-то считалось для галочки".
Yandex
Объявления
23.07.2014, 19:23     Требуется собрать кучу object в один контейнер и искать их по object_name
Ответ Создать тему
Опции темы

Текущее время: 18:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru