c++ - Uso de string_view para la búsqueda de mapas
dictionary c++14 (1)
Debe especificar un comparador transparente explícitamente (como std::less<> ):
std::map<std::string, int, std::less<>> m;
// ~~~~~~~~~~^
std::map<K,V> defecto su comparador a std::less<K> (es decir, uno no transparente ), y desde ( [associative.reqmts]/p13 ):
Las plantillas de función miembro
find,count,lower_bound,upper_boundyequal_rangeno participarán en la resolución de sobrecarga a menos que la identificación de id.Compare::is_transparentsea válida y denote un tipo (14.8.2).
La función de find miembro de plantilla no es un candidato viable.
El siguiente código no se basa en compiladores recientes (g ++ - 5.3, clang ++ - 3.7).
#include <map>
#include <functional>
#include <experimental/string_view>
void f()
{
using namespace std;
using namespace std::experimental;
map<string, int> m;
string s = "foo";
string_view sv(s);
m.find(sv);
}
Error devuelto por clang:
error: no matching member function for call to ''find''
m.find(sv);
~~^~~~
¿Pero no debería ser capaz de usar tipos comparables? Cppreference menciona la siguiente sobrecarga:
template< class K > iterator find( const K& x );
El mismo error ocurre con boost::string_ref .