У меня должен быть ключ с несколькими значениями. Какой datastructure Вы рекомендовали бы?

Я нахожу эту логику немного трудной для понимания. Если я правильно понимаю, вы можете использовать агрегацию - хотя для получения номера конечной точки вам нужно немного подкрутиться:

12
задан Prof. Falken supports Monica 27 October 2018 в 10:00
поделиться

4 ответа

можно использовать мультикарту от STL и использовать вызов

pair<iterator, iterator> equal_range(const key_type& k)

получить диапазон итераторов, которые соответствуют Вашему ключу

лично я нахожу это немного неуклюжим из-за необходимости иметь дело с диапазонами итератора вместо того, чтобы просто получить объект назад, который представляет все значения для того ключа. для обхождения этого, Вы могли также сохранить вектор в обычной карте и добавить Ваши строки к вектору.

4
ответ дан 2 December 2019 в 03:39
поделиться

Поскольку два других указали, std::multimap может быть Ваше решение.

Также рассмотрите станд.:: tr1:: unordered_multimap. Это доступно в VS 2008 кажется, имеет его, GCC это имеет, по крайней мере, от версии 4.3.

0
ответ дан 2 December 2019 в 03:39
поделиться

std::multimap

Ссылка обеспечивает превосходный пример. Заключенный в кавычки ниже:

 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;
}
30
ответ дан 2 December 2019 в 03:39
поделиться

Если вы используете C ++, просто создайте класс для представления ваших пар ключ-значение:

Class foo {
    key : String
    values : list of values
}

Затем создайте карту, которая отображает каждый ключ на объект, содержащий его значения.

] Это просто, расширяемое и может быть выполнено на любом объектно-ориентированном языке.

Извините, мой C ++ заржавел, поэтому синтаксис неправильный, но основная идея проста.

5
ответ дан 2 December 2019 в 03:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: