2015-01-21 4 views
1

Итак, у меня есть неупорядоченная карта, и для каждой клавиши я хочу сохранить два уникальных поплавка. Эти поплавки представляют собой совокупные значения во времени того, что я имитирую, и, таким образом, по мере того, как мой код прогрессирует, значения существующих ключей могут быть добавлены и могут быть созданы новые ключи.Неупорядоченная карта с несколькими значениями

Раньше я отслеживал только одно значение, поэтому неупорядоченная карта была простым решением. Я не уверен, как сохранить два разных значения с одним ключом?

  • Использование unordered_map<int,vector<float> > было моей первой мыслью, но затем добавление к существующим значениям не так просто. Кажется, я должен определить, существует ли ключ в первую очередь, а затем либо добавить новый векторный компонент к существующему, либо установить ключ, равный новому вектору.
  • Я посмотрел на unordered_multimap. Хотя я не очень хорошо разбираюсь в том, как это работает, он, похоже, не показал хороший способ отслеживать, какое из значений является тем, что, учитывая, что у меня есть два значения, которые я хочу сохранить отдельно и уметь определять который есть какой.

Есть ли другой способ этого?


Использование unordered_map<int,pair<float,float> > было простым решением.

+1

Что вы подразумеваете под "определять, что есть"? Вам нужно знать порядок, который они вставляли в карту? –

+3

Если я правильно понимаю, что случилось с 'unordered_map >'. Это очень хорошо отображает «для каждого ключа, который я хочу сохранить двумя уникальными поплавками». Пара позволяет вам отслеживать поплавки с 'first' и' second'. Имейте в виду, что вы должны быть уверены, что вы должны хранить два и только два поплавка. Это решение не развивается. – JBL

+0

Ответ, вероятно, 'unordered_multimap', вы можете уточнить, как ему не хватает« отличного ощущения »и« хорошего пути »? –

ответ

2

Вы можете использовать unordered_map< int, std::pair< float, float > >, обращаясь к значениям через функциии .second. Я не уверен, что это «проще», а затем использовать подход vector<float>. Преимущество векторного подхода заключается в том, что вы можете легко расширять его, чтобы хранить больше значений. Преимущество метода pair состоит в том, что он явно представляет собой два значения и только два значения.

0

Вы можете использовать как vector, так и pair, как упомянуто. Вы также можете рассмотреть возможность создания struct, если число значений фиксировано. Это может быть проще, если у вас есть несколько значений из нескольких типов данных в одной записи.

struct Data { 
float value1; 
float value2; 
}; 

unordered_map<int, Data> myMap; 
Смежные вопросы