我们如何在 C++ 中的无序映射中分配变量并更新它们?
How do we assign variables and update them in unordered maps in C++?
我正在尝试实现文本中字符的概率分布。我正在尝试学习无序映射,但在插入对后我无法更新概率映射。假设我们分配了字母 '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));
}
}
因为 char
只有 256 个可能的值,更好的方法是:
std::array<int, 256> probs;
probs.fill(0);
for (char ch : text)
++probs[ch];
如果使用unordered_map
,循环代码实际上是相同的,但上面的效率更高。
你可以马上写 probs[ch]++
。
因为如果 ch
不匹配容器中任何元素的键,[]
运算符将使用该键插入一个新元素(使用其默认构造函数构造)并且 returns 对其映射值的引用。
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;
}
我正在尝试实现文本中字符的概率分布。我正在尝试学习无序映射,但在插入对后我无法更新概率映射。假设我们分配了字母 '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));
}
}
因为 char
只有 256 个可能的值,更好的方法是:
std::array<int, 256> probs;
probs.fill(0);
for (char ch : text)
++probs[ch];
如果使用unordered_map
,循环代码实际上是相同的,但上面的效率更高。
你可以马上写 probs[ch]++
。
因为如果 ch
不匹配容器中任何元素的键,[]
运算符将使用该键插入一个新元素(使用其默认构造函数构造)并且 returns 对其映射值的引用。
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;
}