C++ 使用字符串视图查找地图
以下代码无法在最新的编译器(g++-5.3、clang++-3.7)上构建 但是C++ 使用字符串视图查找地图,c++,dictionary,c++14,string-view,C++,Dictionary,C++14,String View,以下代码无法在最新的编译器(g++-5.3、clang++-3.7)上构建 但是find是否应该能够使用类似的类型? Cppreference提到了以下重载: template迭代器查找(constk&x) 同样的错误也发生在boost::string_ref中。您需要明确指定一个(如: 在语义上等同于: key_type key = x; c.find(key); 特别是,在实际调用之前,x和key\u type之间的转换只发生一次 异构查找取代了这种转换,有利于比较键和x。这可能导致现有代
find
是否应该能够使用类似的类型?
Cppreference提到了以下重载:
template迭代器查找(constk&x)代码>
同样的错误也发生在boost::string_ref
中。您需要明确指定一个(如:
在语义上等同于:
key_type key = x;
c.find(key);
特别是,在实际调用之前,x
和key\u type
之间的转换只发生一次
异构查找取代了这种转换,有利于比较键
和x
。这可能导致现有代码的性能下降(由于每次比较之前的附加转换),甚至中断编译(如果比较运算符是成员函数,则不会对左侧操作数应用转换):
#包括
#包括
结构A
{
int i;
A(int i):i(i){}
};
布尔运算符如何对无序映射执行相同操作?对于无序映射,应使用C++20:
error: no matching member function for call to 'find'
m.find(sv);
~~^~~~
std::map<std::string, int, std::less<>> m;
// ~~~~~~~~~~^
c.find(x);
key_type key = x;
c.find(key);
#include <set>
#include <functional>
struct A
{
int i;
A(int i) : i(i) {}
};
bool operator<(const A& lhs, const A& rhs)
{
return lhs.i < rhs.i;
}
int main()
{
std::set<A, std::less<>> s{{1}, {2}, {3}, {4}};
s.find(5);
}