用于匹配和计数的字符串和 int 的容器?

Posted

技术标签:

【中文标题】用于匹配和计数的字符串和 int 的容器?【英文标题】:Container for a string and int for matching and counting? 【发布时间】:2011-08-07 12:27:47 【问题描述】:

在 C++ 中,创建一个临时容器来存储字符串和 int 的最简单方法是什么,就像 C# 字典一样,我可以轻松地将字符串键与另一个字符串匹配并增加或减少条目值 int ?

容器的内容将来自一个字符串,其中以空格分隔的每个单词都是一个键条目,每个键的所有值都以 0 开头。

Dictionary<string, int> Options = new Dictionary<string, int>();
Options.Add("xyz", 0);
Options.Add("abc", 0);
Options.Add("dfg", 0);

然后我必须将它与用户选项进行比较,例如:

if (Options.ContainsKey(user_opt))
    Options[user_opt]++;

我最初尝试使用向量,但由于我对 C++ 的了解几乎为 0,所以我大部分时间都被它困住了。

有了向量,这就是我得到的:

vector<string> Options;
boost::split(Options, m_StartMode, boost::is_any_of(" "));

【问题讨论】:

【参考方案1】:

使用std::mapstd::unordered_map 存储键、值。

std::map<std::string, int> Options;
Options.insert(std::make_pair("xyz", 0));
Options.insert(std::make_pair("abc", 1));

然后使用map::find检查key是否存在:

std::map<std::string,int>::iterator iter;
iter = Options.find(user_opt);

if(iter != Options.end())
   iter->second++;

【讨论】:

非常感谢您花时间完成这项工作,有没有一种简单的方法可以验证哪个键也具有最大的价值并返回键名? 为此,您必须编写自己的代码。您可以使用std::max_element 函数,但您需要编写自己的函子。【参考方案2】:

看看std::map

【讨论】:

您好,我知道这可能问得太多了,但是您可以根据我正在尝试锻炼的内容向我展示一个示例吗?

以上是关于用于匹配和计数的字符串和 int 的容器?的主要内容,如果未能解决你的问题,请参考以下文章

XSL:根据属性计数和匹配创建组

javascript计数匹配字符串长度

MongoDB计数按数组元素分组的数组中的匹配字符串

每次字符串与我的字符串数组中的元素匹配时,尝试向变量添加计数

使用 awk sub 以数字方式为字符串添加前缀而不更改计数状态最多 5 个匹配“在每行具有多个匹配项的文本文件中”

算法笔记