在给定情况下使用哪个容器?

Which container to use for given situation?

我正在做一个问题,我需要完成这个任务。

我想添加对 (p1,q1),(p2,q2)..(pn,qn) 这样

(i) 仅添加一次重复对(如在集合中)。
(ii) 我存储计数每对添加到 set.For ex : (7,2) pair 的次数 只会在集合中出现一次,但如果我加 3 次,则计数为 3。

在 c++ 中哪个容器可以有效解决这个问题?

小例子会很棒!

如果你不能理解我的问题请询问,抱歉英语不好。

如何 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