簡體   English   中英

單個對象上的c ++ unordered_map迭代器

[英]c++ unordered_map iterator on single object

我有一個字符串和一個(string,Object)的unordered_map。 我已經有一些代碼在迭代地圖:

for(auto& item : map) {
    do_something;
}

我想修改它以在字符串非空時在for循環中執行部分並在map中找到else else如果string為空則對地圖中的所有項執行此操作。

if(!string.empty()){
    item = map.find(string);
    do_something;
}
else {
    for(auto& item : map) {
        do_something;
    }
}

我可以在不重寫do_something或創建單獨的函數的情況下執行此操作嗎?

遵循您在評論中提出的思路。 您可以通過在特定范圍(由迭代器定義)上的常規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
}

上面的星是std::unordered_map::equal_range

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM