Russian Qt Forum

Программирование => С/C++ => Тема начата: Igors от Ноябрь 01, 2013, 11:05



Название: std::multimap (ключ + индекс)
Отправлено: Igors от Ноябрь 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 второго и.т.д. Ну не перебирать же итераторы в цикле - а тогда как?

Спасибо


Название: Re: std::multimap (ключ + индекс)
Отправлено: Igors от Ноябрь 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). Есть ли способ поприятнее?