【问题标题】:Which container to use for given situation?在特定情况下使用哪个容器?
【发布时间】:2016-04-12 02:51:26
【问题描述】:

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

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

(i) 重复对仅添加一次(如集合中)。
(ii)我存储计算每对添加到集合的次数。例如:(7,2)对 将只出现一次,但如果我添加 3 次计数将是 3。

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

小例子会很棒!

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

【问题讨论】:

  • 你应该看看vector。 Check this link
  • 使用哈希图,键作为元组,值作为添加的次数。
  • 您可能想看看std::mapstd::unordered_map
  • vector 将允许重复,我不希望重复。
  • @Matriac 但它不会低效,而且我也必须跟踪每一对计数..

标签: c++11 stl containers


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2010-10-03
    • 2021-11-06
    • 2014-03-24
    • 2018-05-21
    • 1970-01-01
    • 2012-07-17
    相关资源
    最近更新 更多