簡體   English   中英

如何使用std::map的Compare模板參數進行值比較?

[英]How to use the Compare template parameter of std::map for value comparison?

使用此代碼:

namespace nonstd {
template <class Key,
          class T,
          class Compare = std::greater<T>,
          class Allocator = std::allocator<std::pair<Key const, T>>
          >
using map = std::map<Key, T, Compare, Allocator>;
}

int main() {
  nonstd::map<char, std::size_t> const values = {
    {'A', 3}, {'B', 2}, {'C', 5}
  };

  for (auto const& value : values) {
    std::clog << value.first << " : " << value.second << std::endl;
  }
}

我預計:

C : 5
A : 3
B : 2

但是我得到了:

C : 5
B : 2 // <---
A : 3

我檢查了std::map的 GNU 實現,我看到了我們傳遞的Compare模板參數,將用作鍵的比較 function:

但它還有兩個返回比較值 object 的函數:

有什么方法可以使用Compare模板參數進行值比較嗎?

有什么方法可以使用Compare模板參數進行值比較嗎?

不,沒有。 std::map的元素僅根據鍵進行排序。

如果你想要一個std::pair<char,size_t>的容器根據size_t排序,你可以使用std::set< std::pair<char,size_t>>和一個只比較second的自定義比較器成員。 盡管這與您的 map 有很大不同,因為該集合僅存儲具有唯一second的元素(由於自定義比較器),而 map 存儲具有唯一鍵的元素。

如果沒有其他幫助,您始終可以使用std::vector< std::pair<char,size_t>>並使用 std std::sort ,並使用std::find_if檢查插入時的唯一性。

暫無
暫無

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

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