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

时间:2016-04-12 02:51:27

标签: c++11 stl containers

我正在解决问题,我需要完成这项任务。

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

(i)重复对只添加一次(如套装中) (ii)我存储计数每对添加多少时间。例如:(7,2)对      只会出现一次,但如果我加3次,则会有3次。

哪个容器对c ++中的这个问题有效?

很少的例子会很棒!

请问你是否理解我的问题并抱歉英语不好。

1 个答案:

答案 0 :(得分:4)

std::map<Key, Value>如何将你的对(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