我们如何在 C++ 中的无序映射中分配变量并更新它们?
Posted
技术标签:
【中文标题】我们如何在 C++ 中的无序映射中分配变量并更新它们?【英文标题】:How do we assign variables and update them in unordered maps in C++? 【发布时间】:2021-02-20 08:12:03 【问题描述】:我正在尝试实现文本中字符的概率分布。我正在尝试学习无序地图,但在插入配对后我无法更新概率图。假设我们分配了字母“a”、“b”和“c”,我想增加地图中“a”的值。有什么建议吗?
string text = "abcaa";
unordered_map<char, int> probs;
int i = 0;
//Initialize the probability map.
for (char& ch : text)
if (probs.find(ch) != probs.end()) //if ch not in probs, create a pair.
probs.insert(make_pair(ch, 1));
【问题讨论】:
probs.at('a')++; 【参考方案1】:你可以马上写信probs[ch]++
。
因为如果ch
不匹配容器中任何元素的键,[]
操作符会插入一个带有该键的新元素(使用其默认构造函数构造)并返回对其映射值的引用。
int main()
std::string text = "abcaa";
std::unordered_map<char, int> probs;
int i = 0;
for (char& ch : text)
probs[ch]++;
for (auto& it: probs)
std::cout << it.first << " " << it.second << std::endl;
【讨论】:
【参考方案2】:由于char
只有 256 个可能的值,因此更好的方法是:
std::array<int, 256> probs;
probs.fill(0);
for (char ch : text)
++probs[ch];
如果使用unordered_map
,循环代码其实是一样的,但是上面的效率更高。
【讨论】:
以上是关于我们如何在 C++ 中的无序映射中分配变量并更新它们?的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在门控签入期间获取搁置集名称并将其分配给 tfs 构建任务中的变量