insert custom class into unordered_map c++
By : Max Rahleev
Date : March 29 2020, 07:55 AM
wish of those help None of the two-parameter insert methods matches insert(key_type, mapped_type), which is what you are attempting. The map holds std::pair , so you need to insert a pair, either explicitly: code :
my_items.insert(std::make_pair(Node(33), 894));
my_items.insert({Node(33), 894});
my_items.emplace(Node(33), 894);
|
GNU C++: why custom class can not be value type for unordered_map?
By : vesaiosdev
Date : March 29 2020, 07:55 AM
may help you . This is most probably a stdlibc++ bug, in the version you're using. I'm on ubuntu using gcc 4.8.1, and clang 3.5 trunk. With clang using libc++ there's no problem. With both clang and gcc using libstdc++ the issue is triggered. code :
int main() {
using namespace std;
cout << is_convertible<const A &, A>::value << endl;
}
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:117:14: error: base class has incomplete type
: public conditional<_B1::value, _B2, _B1>::type
~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/bits/stl_pair.h:122:19: note: in instantiation of template class
'std::__and_<std::is_convertible<const int &, const int>, std::is_convertible<const A &, A> >' requested here
enable_if<__and_<is_convertible<const _U1&, _T1>,
^
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/bits/stl_pair.h:124:12: note: in instantiation of default argument for
'pair<const int, A>' required here
constexpr pair(const pair<_U1, _U2>& __p)
^~~~
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/bits/stl_pair.h:124:12: note: while substituting deduced template arguments into
function template 'pair' [with _U1 = const int, _U2 = A, $2 = <no value>]
constexpr pair(const pair<_U1, _U2>& __p)
^
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:803:24: note: in instantiation of default argument for
'__test<std::pair<const int, A>, const std::pair<const int, A> &>' required here
static true_type __test(int);
^~~~~~~~~~~
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:803:24: note: while substituting deduced template arguments into
function template '__test' [with _Tp = std::pair<const int, A>, _Arg = const std::pair<const int, A> &, $2 = <no value>]
static true_type __test(int);
^
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:117:14: note: (skipping 10 contexts in backtrace; use
-ftemplate-backtrace-limit=0 to see all)
: public conditional<_B1::value, _B2, _B1>::type
^
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/bits/unordered_map.h:97:27: note: in instantiation of template type alias
'__check_copy_constructible' requested here
class unordered_map : __check_copy_constructible<_Alloc>
^
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:1305:42: note: in instantiation of template class
'std::unordered_map<int, A, std::hash<int>, std::equal_to<int>, std::allocator<std::pair<const int, A> > >' requested here
static decltype(__test_aux<_To1>(std::declval<_From1>()), __one())
^
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:1306:2: note: while substituting explicitly-specified template
arguments into function template '__test'
__test(int);
^
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:1319:11: note: in instantiation of template class
'std::__is_convertible_helper<const A &, A, false>' requested here
__is_convertible_helper<_From, _To>::value>
^
c++1y-sample.cpp:33:13: note: in instantiation of template class 'std::is_convertible<const A &, A>' requested here
cout << is_convertible<const A &, A>::value << endl;
^
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:1317:12: note: definition of 'std::is_convertible<const A &, A>' is
not complete until the closing '}'
struct is_convertible
|
unordered_map of different custom types
By : awaymoko
Date : March 29 2020, 07:55 AM
it should still fix some issue Suppose if I have these two enums: , I believe you're looking for nested maps: code :
std::unordered_map<Type, std::unordered_map<Location, unsigned int>>
|
unordered_map for custom class does not cause error when inserting the same key
By : nithin veerakumar
Date : March 29 2020, 07:55 AM
Hope this helps Your hash and operator == must satisfy a consistency requirement that they currently violate. When two objects are equal according to ==, their hash codes must be equal according to hash. In other words, while non-equal objects may have the same hash code, equal objects must have the same hash code: code :
size_t operator()(const Line& k) const {
return hash<float>()(k.getM());
}
|
C++ unordered_map using a custom class type as the key
By : BoN
Date : March 29 2020, 07:55 AM
may help you . To be able to use std::unordered_map (or one of the other unordered associative containers) with a user-defined key-type, you need to define two things:
|