Я нахожу эту логику немного трудной для понимания. Если я правильно понимаю, вы можете использовать агрегацию - хотя для получения номера конечной точки вам нужно немного подкрутиться:
можно использовать мультикарту от STL и использовать вызов
pair<iterator, iterator> equal_range(const key_type& k)
получить диапазон итераторов, которые соответствуют Вашему ключу
лично я нахожу это немного неуклюжим из-за необходимости иметь дело с диапазонами итератора вместо того, чтобы просто получить объект назад, который представляет все значения для того ключа. для обхождения этого, Вы могли также сохранить вектор в обычной карте и добавить Ваши строки к вектору.
Поскольку два других указали, std::multimap
может быть Ваше решение.
Также рассмотрите станд.:: tr1:: unordered_multimap. Это доступно в VS 2008
кажется, имеет его, GCC
это имеет, по крайней мере, от версии 4.3
.
Ссылка обеспечивает превосходный пример. Заключенный в кавычки ниже:
int main()
{
multimap<const char*, int, ltstr> m;
m.insert(pair<const char* const, int>("a", 1));
m.insert(pair<const char* const, int>("c", 2));
m.insert(pair<const char* const, int>("b", 3));
m.insert(pair<const char* const, int>("b", 4));
m.insert(pair<const char* const, int>("a", 5));
m.insert(pair<const char* const, int>("b", 6));
cout << "Number of elements with key a: " << m.count("a") << endl;
cout << "Number of elements with key b: " << m.count("b") << endl;
cout << "Number of elements with key c: " << m.count("c") << endl;
cout << "Elements in m: " << endl;
for (multimap<const char*, int, ltstr>::iterator it = m.begin();
it != m.end();
++it)
cout << " [" << (*it).first << ", " << (*it).second << "]" << endl;
}
Если вы используете C ++, просто создайте класс для представления ваших пар ключ-значение:
Class foo {
key : String
values : list of values
}
Затем создайте карту, которая отображает каждый ключ на объект, содержащий его значения.
] Это просто, расширяемое и может быть выполнено на любом объектно-ориентированном языке.
Извините, мой C ++ заржавел, поэтому синтаксис неправильный, но основная идея проста.