在嵌套无序映射中插入或更新键
Insert or update key in nested unordered map
我正在尝试更新嵌套映射中的键(如果存在)或插入(如果不存在)。我正在尝试使用带有 lower_bound 的迭代器来提高此过程的效率。
std::unordered_map<std::string, std::unordered_map<std::string, std::string>> maps;
cache::iterator iter(maps[command[1]].lower_bound(command[2]));
if (iter == maps[command[1]].end() || command[2] < iter->first) {
maps[command[1]].insert(iter, std::make_pair(command[2], command[3]));
} else {
iter->second = command[3];
}
我收到以下编译时错误:
no member named 'lower_bound' in 'std::unordered_map<std::basic_string<char>, std::basic_string<char>, std::hash<std::string>, std::equal_to<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, std::basic_string<char> > > >'
顾名思义,unordered_map
没有以任何特定方式排序。因为 lower_bound
方法和函数引用元素的顺序,所以它们仅对有序数据有意义。这就是 unordered_map
没有这种方法的原因。
许多编译器的基准测试表明 std::map
的元素少于一千个,比 std::unordered_map
快得多。这意味着您应该考虑切换到 std::map
,或使用以下内容:
maps[command[1]].insert_or_assign(command[2], command[3]);
我正在尝试更新嵌套映射中的键(如果存在)或插入(如果不存在)。我正在尝试使用带有 lower_bound 的迭代器来提高此过程的效率。
std::unordered_map<std::string, std::unordered_map<std::string, std::string>> maps;
cache::iterator iter(maps[command[1]].lower_bound(command[2]));
if (iter == maps[command[1]].end() || command[2] < iter->first) {
maps[command[1]].insert(iter, std::make_pair(command[2], command[3]));
} else {
iter->second = command[3];
}
我收到以下编译时错误:
no member named 'lower_bound' in 'std::unordered_map<std::basic_string<char>, std::basic_string<char>, std::hash<std::string>, std::equal_to<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, std::basic_string<char> > > >'
顾名思义,unordered_map
没有以任何特定方式排序。因为 lower_bound
方法和函数引用元素的顺序,所以它们仅对有序数据有意义。这就是 unordered_map
没有这种方法的原因。
许多编译器的基准测试表明 std::map
的元素少于一千个,比 std::unordered_map
快得多。这意味着您应该考虑切换到 std::map
,或使用以下内容:
maps[command[1]].insert_or_assign(command[2], command[3]);