c++ dictionary c++14 string-view

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_bound y equal_range no participarán en la resolución de sobrecarga a menos que la identificación de id. Compare::is_transparent sea ​​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 .