首页 > 解决方案 > 推回地图>*

问题描述

C++

地图<int,矢量>* 最大计数;

当我有一个指向 map maxcount 的指针时,如何正确编写下一条语句?

maxcounts[-m.second]->push_back(m.first);

没有引用我写的指针

maxcounts[-m.second].push_back(m.first);

map<int, vector<char>> maxcounts;
for (pair<char, int> m : counts) {
    if (maxcounts.count(-m.second))
        maxcounts[-m.second].push_back(m.first);
    else
       maxcounts.insert({ -m.second, {m.first} });
}

标签: c++

解决方案


要弄清楚如何使用指向地图的指针,首先以这种方式重写循环:

std::map<char, int> counts;
//...
std::map<int, std::vector<char>> maxcounts;
for (std::pair<char, int> m : counts) 
    maxcounts.insert({-m.second, std::vector<char>()}).first->second.push_back(m.first);

请注意,std::map::insert的返回值是 a std::pairfirst如果该项目已经在地图中,则该对是现有项目的迭代器,或者是新插入项目的迭代器。因此,您可以在一行中执行测试并插入,而无需if语句。

push_back无论插入到地图中的项目是新的还是该项目存在,都会发生。请注意,对于新条目,std::vector正在插入的条目开始为空。

鉴于此,指向地图版本的指针非常简单:

std::map<char, int> counts;
//...
map<int, vector<char>>* maxcounts;
//
for (pair<char, int> m : counts) 
    maxcounts->insert({-m.second, std::vector<char>()}).first->second.push_back(m.first);

现在,为什么你首先需要一个指向地图的指针是另一个问题,但要回答你的问题,上面应该可以工作。


推荐阅读