Russian Qt Forum
Сентябрь 30, 2024, 18:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Данные с неск ключами  (Прочитано 9211 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #15 : Сентябрь 16, 2012, 20:03 »

Нет, скорее всего при добавлении если найден уже элемент с таким ключем, то он просто добавляет его в существующий список.
Это легко проверить, ведь ссылка на ключ доступна
Код
C++ (Qt)
#include <stdio.h>
#include <map>
 
int main()
{
typedef std::multimap <int, int> TMap;
TMap test;
for (size_t i = 0; i < 10; ++i)
test.insert(std::make_pair(0, 0));
 
for (TMap::iterator it = test.begin(); it != test.end(); ++it)
printf("&key = %p, &val = %p\n", &it->first, &it->second);
 
return 0;
}
 
У меня адреса всех ключей уникальны (как и значений). А у Вас?

Если вдруг это не так, то можешь написать свой map с сравнением и хранением.
Если для Вас такое написание тривиально (для меня нет), то мне было бы интересно посмотреть "как" (ну хотя бы набросок). А без этого - звучит несерьезно Улыбающийся

И скажи что для тебя важнее: сэкономить память или увеличить скорость операций, ибо одновременно два параметра не улучшить так как тут и так все максимально оптимально сделано.
Эта дежурная фраза в данном случае неудачна/неуместна - мультимапа не только жрет в неск раз больше памяти, но "зато" и работает медленнее (больше элементов - больше шагов поиска).
Записан
V1KT0P
Гость
« Ответ #16 : Сентябрь 16, 2012, 20:16 »

Код:
[quote author=Igors link=topic=23026.msg162797#msg162797 date=1347815037]
У меня адреса всех ключей уникальны (как и значений). А у Вас?
Тоже, а жаль. Я думал что стандартные контейнеры сделаны максимально идеально.
Если для Вас такое написание тривиально (для меня нет), то мне было бы интересно посмотреть "как" (ну хотя бы набросок). А без этого - звучит несерьезно Улыбающийся
Берешь готовый мультимап, смотрешь как он работает. И чуть переделываешь его так чтоб находя уже существующий ключ он добавлял в список к нему а не создавал новый.
Эта дежурная фраза в данном случае неудачна/неуместна - мультимапа не только жрет в неск раз больше памяти, но "зато" и работает медленнее (больше элементов - больше шагов поиска).
Если не устраивает стандартный, то либо делать свой, либо искать подходящий(например в бусте =) ).
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #17 : Сентябрь 17, 2012, 01:05 »

Берешь готовый мультимап, смотрешь как он работает. И чуть переделываешь его так чтоб находя уже существующий ключ он добавлял в список к нему а не создавал новый.
А не поплохеет от STL-вского кода? Улыбающийся  Да и сама идея, на мой взгляд, ошибочна. Map не должен знать равны ключи или нет, он просто использует функтор (по умолчанию оператор <).

Если не устраивает стандартный, то либо делать свой, либо искать подходящий(например в бусте =) ).
Ну что же Вы так "мордой в салат" (то есть в дуст) Плачущий  Ведь правильная (по моему мнению) мысль у Вас была, Вы ее просто потеряли. Можно сделать чтобы памяти съедало раз в 5 меньше и по скорости быстрее (так бывает).
Записан
V1KT0P
Гость
« Ответ #18 : Сентябрь 17, 2012, 08:10 »

А не поплохеет от STL-вского кода? Улыбающийся  Да и сама идея, на мой взгляд, ошибочна. Map не должен знать равны ключи или нет, он просто использует функтор (по умолчанию оператор <).
И как по твоему происходит поиск ключа? Вот именно так и определять =).

Ну что же Вы так "мордой в салат" (то есть в дуст) Плачущий  Ведь правильная (по моему мнению) мысль у Вас была, Вы ее просто потеряли. Можно сделать чтобы памяти съедало раз в 5 меньше и по скорости быстрее (так бывает).
Если ты про уменьшение размера ключа до int то это ясно, иначе я не знаю на чем ты сможешь с экономить.
Нет, можно конечно при условии что уникальных ключей намного меньше объектов пытаться найти их в мапе если есть то достать оттуда список и добавить, а если нету то создать список добавить туда объект и этот список уже добавить в мап. Но это надо на реальных данных смотреть какая выгода получится.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.189 секунд. Запросов: 23.