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

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

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

Сообщений: 11445


Просмотр профиля
« : Ноябрь 01, 2013, 11:05 »

Добрый день

Код
C++ (Qt)
typedef std::multimap <std::string, Node *> TMap;
typedef std::pair <TMap::iterator, TMap::iterator> TRange;
 
Node * NthNode( TMap & tm, const std::string & name, int index )
{
 TRange range = tm.equal_range(name);  
 if (range.first == range.second) return 0;   // нет ни одного элемента с ключом name
 
// а здесь что?
}
 
Ну то есть если index == 0, я хочу получить значение первого вставленного с именем name, index == 1 второго и.т.д. Ну не перебирать же итераторы в цикле - а тогда как?

Спасибо
« Последнее редактирование: Ноябрь 01, 2013, 11:09 от Igors » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Ноябрь 01, 2013, 12:47 »

Сделал так
Код
C++ (Qt)
Node * NthNode( TMap & tm, const std::string & name, int index )
{
 TRange range = tm.equal_range(name);  
 ptrdiff_t count = std::distance(range.first, range.second);
 if (count < index + 1) return 0;
 std::advance(range.first, count - index - 1);
 return range.first->second;
}
Но как-то коряво (distance + advance). Есть ли способ поприятнее?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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