![](/img/trans.png)
[英]How not to use custom comparison function of std::map in searching ( map::find)?
[英]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.