了解std :: map :: find

Ash*_*osh 7 c++ c++11

我正在尝试学习如何使用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";
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

Inside lambda
Inside lambda
Inside lambda
Inside lambda
Inside lambda
Inside lambda
Inside lambda
Found 1 2
Run Code Online (Sandbox Code Playgroud)

find对这种情况下的实际工作方式感到有些困惑.为什么我得到7次lambda函数调用,即使我的地图中只有2个键?

n. *_* m. 5

operator <不能告诉你两件事一气呵成.你需要调用它们x < yy < x进行验证x == y.所以每次map实际找到一个键时,它会比较参数和找到的键两次,一次正常,一次换掉.

这导致lambda(1,1)和的双重发生lambda(10,10).

至于lambda(10,1)lambda(1,10)在钥匙插入元素时10,这是必要的,因为map 可能需要调用比较也两次当它未能找到一把钥匙(插入的交换才能看到).