c++ - map::find with a type that's comparable but not convertible to key_type -


std::map::find accepts const key_type& argument. way requires argument convertible key_type. seems oversight me because argument doesn't have convertible key_type, has comparable it.

i can make arbitrary type comparable defining 2 operator< overloads:

struct a; bool operator<(const key_type&, const a&); bool operator<(const a&, const key_type&); 

map::find should template. it's not. i'm done whining can ask actual question: there way work around , search among map keys comparable not convertible value?

my understanding use std::find_if, linear search instead of binary search (o(n) instead of o(log(n))). naturally, don't want implement binary search hand.

since c++14, map::find in fact template , works desire (at least when given compare::is_transparent condition described below satisfied).

from cppreference:

std::map::find

c++ containers library std::map

iterator find(const key& key ); (1)

const_iterator find( const key& key ) const; (2)

template< class k > iterator find( const k& x ); (3) (since c++14)

template< class k > const_iterator find( const k& x ) const; (4) (since c++14)

1,2) finds element key equivalent key.

3,4) finds element key compares equivalent value x. overload participates in overload resolution if qualified-id compare::is_transparent valid , denotes type. allows calling function without constructing instance of key


Comments

Popular posts from this blog

sql - invalid in the select list because it is not contained in either an aggregate function -

Angularjs unit testing - ng-disabled not working when adding text to textarea -

How to start daemon on android by adb -