2016-04-12 6 views
0

У меня проблема, и мне нужно выполнить эту задачу.Какой контейнер использовать для данной ситуации?

Я хочу добавить пар (p1, q1), (p2, q2) .. (рп, Qn) таким образом, что

(я) Дубликат пара добавляется только один раз (например, в наборе).
(II) хранить подсчитать, сколько раз каждая пара добавляются к set.For ех: (7,2) пара представит в установлен только один раз, но если добавить 3 раза отсчет 3.

какой контейнер эффективен для этой проблемы в C++?

Маленький пример будет большим!

Пожалуйста, спросите, не можете ли вы понять мою проблему и извините за плохой английский.

+0

Вы должны взглянуть на вектор. [Проверить эту ссылку] (http://stackoverflow.com/questions/1041620/whats-the-most-efficient-way-to-erase-duplicates-and-sort-a-vector) – Matriac

+0

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

+2

Возможно, вам захочется взглянуть на ['std :: map'] (http://en.cppreference.com/w/cpp/container/map) или [' std :: unordered_map'] (http: // en.cppreference.com/w/cpp/container/unordered_map). – Lingxi

ответ

4

Как насчет std::map<Key, Value>, чтобы сопоставить свои пары (Ключ) с их количеством и при вставке увеличивайте счетчик (значение).

using pairs_to_count = std::map<std::pair<T1, T2>, size_t>; 

std::pair<T1, T2> p1 = // some value; 
std::pair<T1, T2> p2 = // some other value; 

pairs_to_count[p1]++; 
pairs_to_count[p1]++; 

pairs_to_count[p2]++; 
pairs_to_count[p2]++; 
pairs_to_count[p2]++; 

В этом коде operator[] автоматически добавит ключ в карте, если он еще не существует. В этот момент он инициализирует соответствующее значение ключа равным нулю. Но когда вы вставляете, даже в первый раз, это значение увеличивается.

Уже после первой вставки количество 1 правильно отражает количество вставок. Это значение увеличивается, когда вы вставляете больше.

Позже получение отсчета снова вызывает operator[], чтобы получить значение, связанное с заданным ключом.

size_t const p2_count = pairs_to_count[p2]; // equals 3 
Смежные вопросы