gpt4 book ai didi

c++ - 理解 std::map::find

转载 作者:可可西里 更新时间:2023-11-01 18:30:50 27 4
gpt4 key购买 nike

我正在尝试学习如何将 std::map 与函数一起使用。我对 std::map::find 在这方面的工作方式有点困惑。这是一个简单的代码,其中我将 Lambda 函数与 map 一起使用。

auto Lambda = [](const int&a, const int& b) {
cout << "\n Inside lambda \n";
return a < b;
};

std::map<int, int, decltype(Lambda)> expt(Lambda);
expt[1] = 2;
expt[10] = 12;
auto search1 = expt.find(1);
auto search10 = expt.find(10);
if(search1 != expt.end()) {
std::cout << "Found " << search1->first << " " << search1->second << '\n';
}
else {
std::cout << "Not found\n";
}

这是我得到的输出:

Inside lambda
Inside lambda
Inside lambda
Inside lambda
Inside lambda
Inside lambda
Inside lambda
Found 1 2

我对 find 在这种情况下的实际工作方式有点困惑。为什么即使我的 map 中只有 2 个键,我也会收到 7 次 lambda 函数调用?

最佳答案

operator <不能一次性告诉你两件事是相等的。您需要同时调用 x < yy < x为了验证 x == y .所以每次map实际上找到一个键,它比较参数和找到的键两次,一次正常,一次交换。

这说明了 lambda(1,1) 的两次出现和 lambda(10,10) .

至于lambda(10,1)lambda(1,10)当插入一个键为 10 的元素时,这是必需的,因为 map 可能在找不到键时也必须调用两次比较(交换插入顺序以查看)。

关于c++ - 理解 std::map::find,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44912675/

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