gpt4 book ai didi

java - C++映射中java `TreeMap.lowerEntry`和 `TreeMap.higherEntry`的等价物?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:16:01 26 4
gpt4 key购买 nike

我认为 C++ std::map.lower_bound 等于 java 的 TreeMap.higherEntryC++ std::map 中 java 的 TreeMap.lowerEntry 是什么?

最佳答案

这两个 C++ 函数的返回值都是一个双向迭代器。所以,你可以这样做:

lowerEntry = --mymap.lower_bound(mykey);

当然,您只能在 mymap.lower_bound(mykey) != mymap.begin() 时执行此操作。

请注意,使用 lower_bound 而不是 upper_bound 至关重要。如果您使用 upper_bound,您最终可能会或可能不会得到一个键等于 mykey 的对。

包装在函数中:

template < typename Key, typename Value, typename Compare, typename Alloc >
auto lowerEntry(std::map<Key, Value, Compare, Alloc>& map, Key key) -> decltype(map.begin()) {
auto iter = map.lower_bound(key); // find the first element to go at or after key
if(iter == map.begin()) // all elements go after key
return map.end(); // signals that no lowerEntry could be found
return --iter; // pre-decrement to return an iterator to the element before iter
}

不要介意所有模板的东西——这很尴尬。

尾随返回类型 (-> decltype(...)) 只是为了使函数签名更具可读性。如果您无权访问 C++11,则可以使用它作为签名:

typename std::map<Key, Value, Compare, Alloc>::iterator lowerEntry(std::map<Key, Value, Compare, Alloc>& map, Key key) {

这是 Wandbox 上的代码片段的链接(允许您在多个编译器中运行它):http://melpon.org/wandbox/permlink/slFyTXHgFzWiZEIL

关于java - C++映射中java `TreeMap.lowerEntry`和 `TreeMap.higherEntry`的等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33493766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com