在给定情况下使用哪个容器?
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
我正在做一个问题,我需要完成这个任务。
我想添加对 (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