gpt4 book ai didi

c++ - 如何为 std::multimap 的给定键获取 "previous"项的迭代器(或值)?

转载 作者:太空狗 更新时间:2023-10-29 23:50:45 25 4
gpt4 key购买 nike

我想为我的 std::multimap 获取在给定 key 之前 的项目。

对于给定键之后的项目,我可以简单地使用 std::multimap::upper_bound(它将返回键大于给定的元素)。但不幸的是,std::multimap::lower_bound 返回带有“lower or equal”键的元素。

样本取自 http://www.cplusplus.com/reference/map/multimap/lower_bound/ :

mymultimap.insert(std::make_pair('a',10));
mymultimap.insert(std::make_pair('b',121));
mymultimap.insert(std::make_pair('c',1001));
mymultimap.insert(std::make_pair('c',2002));
mymultimap.insert(std::make_pair('d',11011));
mymultimap.insert(std::make_pair('e',44));

itlow = mymultimap.lower_bound ('b'); // itlow points to b
itup = mymultimap.upper_bound ('d'); // itup points to e (not d)

当您将 b 作为参数时,如何获取 a 的迭代器(或值)?

最佳答案

您可以使用 lower_bound,但您必须考虑两种极端情况:它返回 begin() 并返回 end():

auto itfound = mymultimap.lower_bound('b');
if (itfound == mymultimap.begin()) {
// 'b', or something past 'b', is the first item
// or the map is empty
// what to do here?
}
else if (itfound == mymultimap.end()) {
// there does not exist an item >= 'b'
// what to do here? possibly std::prev(end()) ?
}
else {
// ok cool, we found something in the middle
// just back up
--itfound;

// do stuff with itfound here
}

关于c++ - 如何为 std::multimap 的给定键获取 "previous"项的迭代器(或值)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27611598/

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