Наиболее подходящий ассоциативный контейнер STL, когда ключ является частью объекта [C ++]

У меня есть такой класс:

struct Thing
{
    unsigned index;
    // more data members
};

Я использую std :: map , чтобы содержать мою Thing с. Код вызова выглядит примерно так:

Thing myThing(/*...*/);
std::map<Thing> things;
things[myThing.index] = myThing;
// ...
Thing &thing3 = things[3];

Мне было интересно, существует ли подход, который мог бы использовать Thing :: index напрямую без необходимости неявно копировать его в pair :: first .

Думаю, мне понадобится какой-нибудь оператор сравнения Thing , но это нормально. std :: set может работать, но мне понадобится целый объект Thing в качестве ключа:

std::set<Thing> things;
Thing &thing3 = *things.find(Thing(3));

Кроме рефакторинга Thing в std: : pair , можно мне лучше работать с STL?

5
задан paperjam 23 October 2011 в 20:38
поделиться