c++ unordered_map 单个对象上的迭代器
c++ unordered_map iterator on single object
我有一个字符串和一个 unordered_map 的(字符串,对象)。我已经有一些代码在地图上迭代:
for(auto& item : map) {
do_something;
}
我想修改它以在字符串非空时执行 for 循环内的部分并在地图中找到否则如果字符串为空则对地图中的所有项目执行此操作。
if(!string.empty()){
item = map.find(string);
do_something;
}
else {
for(auto& item : map) {
do_something;
}
}
我可以在不重写 do_something 或创建单独的函数的情况下执行此操作吗?
遵循您在评论中提出的思路。您可以将范围 for 循环替换为特定范围(由迭代器定义)上的常规 for 循环。要定义它,您需要这样的东西:
auto begin = map.begin(), end = map.end(); // The whole map
if(!string.empty())
std::tie(begin, end) = map.equal_range(string);
// constrain range to the single element
for(; begin != end; ++begin) { // loop over it
auto& item = *begin;
// Do something
}
我有一个字符串和一个 unordered_map 的(字符串,对象)。我已经有一些代码在地图上迭代:
for(auto& item : map) {
do_something;
}
我想修改它以在字符串非空时执行 for 循环内的部分并在地图中找到否则如果字符串为空则对地图中的所有项目执行此操作。
if(!string.empty()){
item = map.find(string);
do_something;
}
else {
for(auto& item : map) {
do_something;
}
}
我可以在不重写 do_something 或创建单独的函数的情况下执行此操作吗?
遵循您在评论中提出的思路。您可以将范围 for 循环替换为特定范围(由迭代器定义)上的常规 for 循环。要定义它,您需要这样的东西:
auto begin = map.begin(), end = map.end(); // The whole map
if(!string.empty())
std::tie(begin, end) = map.equal_range(string);
// constrain range to the single element
for(; begin != end; ++begin) { // loop over it
auto& item = *begin;
// Do something
}