This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
unordered_map with valarray as key
- From: Daniel Molina García <unomas at correo dot ugr dot es>
- To: libstdc++ at gcc dot gnu dot org
- Date: Mon, 28 Oct 2013 13:40:43 +0100
- Subject: unordered_map with valarray as key
- Authentication-results: sourceware.org; auth=none
Hello,
I'm not sure if my code is valid, but I think that unordered_map is not
working ok with valarray as key.
When I compile my test code with
> g++ --std=c++0x
I have no problems but with
> g++ --std=c++0x -DVALARRAY
I obtain a verbose output. See at the end of the message.
Code:
// unordered_map::find
#include <iostream>
#include <unordered_map>
#include <valarray>
using namespace std;
#ifdef VALARRAY
typedef valarray<long int> KeyType;
#else
typedef int KeyType;
#endif
typedef double ValueType;
int
main ()
{
unordered_map<KeyType,ValueType> mymap;
#ifdef VALARRAY
KeyType k1 (2, 3);
KeyType k2 (2, 4);
KeyType k3 (2, 5);
#else
KeyType k1 (2);
KeyType k2 (3);
KeyType k3 (4);
#endif
ValueType v1 (2.4);
ValueType v2 (3.5);
ValueType v3 (4.2);
mymap.insert (make_pair<KeyType,ValueType> (k1, v1));
mymap.insert (make_pair<KeyType,ValueType> (k2, v2));
mymap.insert (make_pair<KeyType,ValueType> (k3, v3));
unordered_map<KeyType,ValueType>::const_iterator got = mymap.find
(k2);
return 0;
}
Output:
$ g++ --version
g++ (GCC) 4.8.1 20130725 (prerelease)
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.
$ g++ --std=c++0x -DVALARRAY unordered_map_CNode.cpp
In file included from /usr/include/c++/4.8.1/bits/hashtable.h:35:0,
from /usr/include/c++/4.8.1/unordered_map:47,
from unordered_map_CNode.cpp:3:
/usr/include/c++/4.8.1/bits/hashtable_policy.h: In instantiation of
'struct std::__detail::_Hash_code_base<std::valarray<long int>,
std::pair<const std::valarray<long int>, double>,
std::__detail::_Select1st, std::hash<std::valarray<long int> >,
std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash,
true>':
/usr/include/c++/4.8.1/bits/hashtable_policy.h:1402:10: required from
'struct std::__detail::_Hashtable_base<std::valarray<long int>,
std::pair<const std::valarray<long int>, double>,
std::__detail::_Select1st, std::equal_to<std::valarray<long int> >,
std::hash<std::valarray<long int> >, std::__detail::_Mod_range_hashing,
std::__detail::_Default_ranged_hash,
std::__detail::_Hashtable_traits<true, false, true> >'
/usr/include/c++/4.8.1/bits/hashtable.h:174:11: required from 'class
std::_Hashtable<std::valarray<long int>, std::pair<const
std::valarray<long int>, double>, std::allocator<std::pair<const
std::valarray<long int>, double> >, std::__detail::_Select1st,
std::equal_to<std::valarray<long int> >, std::hash<std::valarray<long
int> >, std::__detail::_Mod_range_hashing,
std::__detail::_Default_ranged_hash,
std::__detail::_Prime_rehash_policy,
std::__detail::_Hashtable_traits<true, false, true> >'
/usr/include/c++/4.8.1/bits/unordered_map.h:100:18: required from
'class std::unordered_map<std::valarray<long int>, double>'
unordered_map_CNode.cpp:20:36: required from here
/usr/include/c++/4.8.1/bits/hashtable_policy.h:1070:12: error: invalid
use of incomplete type 'struct std::hash<std::valarray<long int> >'
struct _Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2,
^
In file included from /usr/include/c++/4.8.1/bits/basic_string.h:3033:0,
from /usr/include/c++/4.8.1/string:52,
from /usr/include/c++/4.8.1/bits/locale_classes.h:40,
from /usr/include/c++/4.8.1/bits/ios_base.h:41,
from /usr/include/c++/4.8.1/ios:42,
from /usr/include/c++/4.8.1/ostream:38,
from /usr/include/c++/4.8.1/iostream:39,
from unordered_map_CNode.cpp:2:
/usr/include/c++/4.8.1/bits/functional_hash.h:58:12: error: declaration
of 'struct std::hash<std::valarray<long int> >'
struct hash;
^
In file included from /usr/include/c++/4.8.1/bits/hashtable.h:35:0,
from /usr/include/c++/4.8.1/unordered_map:47,
from unordered_map_CNode.cpp:3:
/usr/include/c++/4.8.1/bits/hashtable_policy.h:1070:12: error: invalid
use of incomplete type 'struct std::hash<std::valarray<long int> >'
struct _Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2,
^
In file included from /usr/include/c++/4.8.1/bits/basic_string.h:3033:0,
from /usr/include/c++/4.8.1/string:52,
from /usr/include/c++/4.8.1/bits/locale_classes.h:40,
from /usr/include/c++/4.8.1/bits/ios_base.h:41,
from /usr/include/c++/4.8.1/ios:42,
from /usr/include/c++/4.8.1/ostream:38,
from /usr/include/c++/4.8.1/iostream:39,
from unordered_map_CNode.cpp:2:
/usr/include/c++/4.8.1/bits/functional_hash.h:58:12: error: declaration
of 'struct std::hash<std::valarray<long int> >'
struct hash;
^
In file included from /usr/include/c++/4.8.1/bits/hashtable.h:35:0,
from /usr/include/c++/4.8.1/unordered_map:47,
from unordered_map_CNode.cpp:3:
/usr/include/c++/4.8.1/bits/hashtable_policy.h:1082:53: error: invalid
use of incomplete type 'struct std::hash<std::valarray<long int> >'
using __ebo_h1 = _Hashtable_ebo_helper<1, _H1>;
^
In file included from /usr/include/c++/4.8.1/bits/basic_string.h:3033:0,
from /usr/include/c++/4.8.1/string:52,
from /usr/include/c++/4.8.1/bits/locale_classes.h:40,
from /usr/include/c++/4.8.1/bits/ios_base.h:41,
from /usr/include/c++/4.8.1/ios:42,
from /usr/include/c++/4.8.1/ostream:38,
from /usr/include/c++/4.8.1/iostream:39,
from unordered_map_CNode.cpp:2:
/usr/include/c++/4.8.1/bits/functional_hash.h:58:12: error: declaration
of 'struct std::hash<std::valarray<long int> >'
struct hash;
^
In file included from /usr/include/c++/4.8.1/bits/hashtable.h:35:0,
from /usr/include/c++/4.8.1/unordered_map:47,
from unordered_map_CNode.cpp:3:
/usr/include/c++/4.8.1/bits/hashtable_policy.h:1082:53: error: invalid
use of incomplete type 'struct std::hash<std::valarray<long int> >'
using __ebo_h1 = _Hashtable_ebo_helper<1, _H1>;
^
In file included from /usr/include/c++/4.8.1/bits/basic_string.h:3033:0,
from /usr/include/c++/4.8.1/string:52,
from /usr/include/c++/4.8.1/bits/locale_classes.h:40,
from /usr/include/c++/4.8.1/bits/ios_base.h:41,
from /usr/include/c++/4.8.1/ios:42,
from /usr/include/c++/4.8.1/ostream:38,
from /usr/include/c++/4.8.1/iostream:39,
from unordered_map_CNode.cpp:2:
/usr/include/c++/4.8.1/bits/functional_hash.h:58:12: error: declaration
of 'struct std::hash<std::valarray<long int> >'
struct hash;
^
unordered_map_CNode.cpp: In constructor 'std::unordered_map<_Key, _Tp,
_Hash, _Pred, _Alloc>::unordered_map(std::unordered_map<_Key, _Tp,
_Hash, _Pred, _Alloc>::size_type, const hasher&, const key_equal&, const
allocator_type&) [with _Key = std::valarray<long int>; _Tp = double;
_Hash = std::hash<std::valarray<long int> >; _Pred =
std::equal_to<std::valarray<long int> >; _Alloc =
std::allocator<std::pair<const std::valarray<long int>, double> >;
std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::size_type =
unsigned int; std::unordered_map<_Key, _Tp, _Hash, _Pred,
_Alloc>::hasher = std::hash<std::valarray<long int> >;
std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::key_equal =
std::equal_to<std::valarray<long int> >; std::unordered_map<_Key, _Tp,
_Hash, _Pred, _Alloc>::allocator_type = std::allocator<std::pair<const
std::valarray<long int>, double> >]':
unordered_map_CNode.cpp:20:36: error: invalid use of incomplete type
'std::unordered_map<std::valarray<long int>, double>::hasher {aka struct
std::hash<std::valarray<long int> >}'
unordered_map<KeyType,ValueType> mymap;
^
In file included from /usr/include/c++/4.8.1/bits/basic_string.h:3033:0,
from /usr/include/c++/4.8.1/string:52,
from /usr/include/c++/4.8.1/bits/locale_classes.h:40,
from /usr/include/c++/4.8.1/bits/ios_base.h:41,
from /usr/include/c++/4.8.1/ios:42,
from /usr/include/c++/4.8.1/ostream:38,
from /usr/include/c++/4.8.1/iostream:39,
from unordered_map_CNode.cpp:2:
/usr/include/c++/4.8.1/bits/functional_hash.h:58:12: error: declaration
of 'std::unordered_map<std::valarray<long int>, double>::hasher {aka
struct std::hash<std::valarray<long int> >}'
struct hash;
^
unordered_map_CNode.cpp:20:36: note: when instantiating default
argument for call to std::unordered_map<_Key, _Tp, _Hash, _Pred,
_Alloc>::unordered_map(std::unordered_map<_Key, _Tp, _Hash, _Pred,
_Alloc>::size_type, const hasher&, const key_equal&, const
allocator_type&) [with _Key = std::valarray<long int>; _Tp = double;
_Hash = std::hash<std::valarray<long int> >; _Pred =
std::equal_to<std::valarray<long int> >; _Alloc =
std::allocator<std::pair<const std::valarray<long int>, double> >;
std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::size_type =
unsigned int; std::unordered_map<_Key, _Tp, _Hash, _Pred,
_Alloc>::hasher = std::hash<std::valarray<long int> >;
std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::key_equal =
std::equal_to<std::valarray<long int> >; std::unordered_map<_Key, _Tp,
_Hash, _Pred, _Alloc>::allocator_type = std::allocator<std::pair<const
std::valarray<long int>, double> >]
unordered_map<KeyType,ValueType> mymap;
^
unordered_map_CNode.cpp: In function 'int main()':
unordered_map_CNode.cpp:36:53: error: no matching function for call to
'make_pair(KeyType&, ValueType&)'
mymap.insert (make_pair<KeyType,ValueType> (k1, v1));
^
unordered_map_CNode.cpp:36:53: note: candidate is:
In file included from /usr/include/c++/4.8.1/bits/stl_algobase.h:64:0,
from /usr/include/c++/4.8.1/bits/char_traits.h:39,
from /usr/include/c++/4.8.1/ios:40,
from /usr/include/c++/4.8.1/ostream:38,
from /usr/include/c++/4.8.1/iostream:39,
from unordered_map_CNode.cpp:2:
/usr/include/c++/4.8.1/bits/stl_pair.h:276:5: note: template<class _T1,
class _T2> constexpr std::pair<typename
std::__decay_and_strip<_Tp>::__type, typename
std::__decay_and_strip<_T2>::__type> std::make_pair(_T1&&, _T2&&)
make_pair(_T1&& __x, _T2&& __y)
^
/usr/include/c++/4.8.1/bits/stl_pair.h:276:5: note: template argument
deduction/substitution failed:
unordered_map_CNode.cpp:36:53: note: cannot convert 'k1' (type
'KeyType {aka std::valarray<long int>}') to type 'std::valarray<long
int>&&'
mymap.insert (make_pair<KeyType,ValueType> (k1, v1));
^
unordered_map_CNode.cpp:37:53: error: no matching function for call to
'make_pair(KeyType&, ValueType&)'
mymap.insert (make_pair<KeyType,ValueType> (k2, v2));
^
unordered_map_CNode.cpp:37:53: note: candidate is:
In file included from /usr/include/c++/4.8.1/bits/stl_algobase.h:64:0,
from /usr/include/c++/4.8.1/bits/char_traits.h:39,
from /usr/include/c++/4.8.1/ios:40,
from /usr/include/c++/4.8.1/ostream:38,
from /usr/include/c++/4.8.1/iostream:39,
from unordered_map_CNode.cpp:2:
/usr/include/c++/4.8.1/bits/stl_pair.h:276:5: note: template<class _T1,
class _T2> constexpr std::pair<typename
std::__decay_and_strip<_Tp>::__type, typename
std::__decay_and_strip<_T2>::__type> std::make_pair(_T1&&, _T2&&)
make_pair(_T1&& __x, _T2&& __y)
^
/usr/include/c++/4.8.1/bits/stl_pair.h:276:5: note: template argument
deduction/substitution failed:
unordered_map_CNode.cpp:37:53: note: cannot convert 'k2' (type
'KeyType {aka std::valarray<long int>}') to type 'std::valarray<long
int>&&'
mymap.insert (make_pair<KeyType,ValueType> (k2, v2));
^
unordered_map_CNode.cpp:38:53: error: no matching function for call to
'make_pair(KeyType&, ValueType&)'
mymap.insert (make_pair<KeyType,ValueType> (k3, v3));
^
unordered_map_CNode.cpp:38:53: note: candidate is:
In file included from /usr/include/c++/4.8.1/bits/stl_algobase.h:64:0,
from /usr/include/c++/4.8.1/bits/char_traits.h:39,
from /usr/include/c++/4.8.1/ios:40,
from /usr/include/c++/4.8.1/ostream:38,
from /usr/include/c++/4.8.1/iostream:39,
from unordered_map_CNode.cpp:2:
/usr/include/c++/4.8.1/bits/stl_pair.h:276:5: note: template<class _T1,
class _T2> constexpr std::pair<typename
std::__decay_and_strip<_Tp>::__type, typename
std::__decay_and_strip<_T2>::__type> std::make_pair(_T1&&, _T2&&)
make_pair(_T1&& __x, _T2&& __y)
^
/usr/include/c++/4.8.1/bits/stl_pair.h:276:5: note: template argument
deduction/substitution failed:
unordered_map_CNode.cpp:38:53: note: cannot convert 'k3' (type
'KeyType {aka std::valarray<long int>}') to type 'std::valarray<long
int>&&'
mymap.insert (make_pair<KeyType,ValueType> (k3, v3));
^
In file included from /usr/include/c++/4.8.1/bits/hashtable.h:35:0,
from /usr/include/c++/4.8.1/unordered_map:47,
from unordered_map_CNode.cpp:3:
/usr/include/c++/4.8.1/bits/hashtable_policy.h: In instantiation of
'std::__detail::_Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2,
std::__detail::_Default_ranged_hash, true>::__hash_code
std::__detail::_Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2,
std::__detail::_Default_ranged_hash, true>::_M_hash_code(const _Key&)
const [with _Key = std::valarray<long int>; _Value = std::pair<const
std::valarray<long int>, double>; _ExtractKey =
std::__detail::_Select1st; _H1 = std::hash<std::valarray<long int> >;
_H2 = std::__detail::_Mod_range_hashing;
std::__detail::_Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2,
std::__detail::_Default_ranged_hash, true>::__hash_code = unsigned
int]':
/usr/include/c++/4.8.1/bits/hashtable.h:1023:50: required from
'std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2,
_Hash, _RehashPolicy, _Traits>::iterator std::_Hashtable<_Key, _Value,
_Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy,
_Traits>::find(const key_type&) [with _Key = std::valarray<long int>;
_Value = std::pair<const std::valarray<long int>, double>; _Alloc =
std::allocator<std::pair<const std::valarray<long int>, double> >;
_ExtractKey = std::__detail::_Select1st; _Equal =
std::equal_to<std::valarray<long int> >; _H1 =
std::hash<std::valarray<long int> >; _H2 =
std::__detail::_Mod_range_hashing; _Hash =
std::__detail::_Default_ranged_hash; _RehashPolicy =
std::__detail::_Prime_rehash_policy; _Traits =
std::__detail::_Hashtable_traits<true, false, true>;
std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2,
_Hash, _RehashPolicy, _Traits>::iterator =
std::__detail::_Node_iterator<std::pair<const std::valarray<long int>,
double>, false, true>; std::_Hashtable<_Key, _Value, _Alloc,
_ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::key_type
= std::valarray<long int>]'
/usr/include/c++/4.8.1/bits/unordered_map.h:543:29: required from
'std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::iterator
std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::find(const
key_type&) [with _Key = std::valarray<long int>; _Tp = double; _Hash =
std::hash<std::valarray<long int> >; _Pred =
std::equal_to<std::valarray<long int> >; _Alloc =
std::allocator<std::pair<const std::valarray<long int>, double> >;
std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::iterator =
std::__detail::_Node_iterator<std::pair<const std::valarray<long int>,
double>, false, true>; std::unordered_map<_Key, _Tp, _Hash, _Pred,
_Alloc>::key_type = std::valarray<long int>]'
unordered_map_CNode.cpp:40:72: required from here
/usr/include/c++/4.8.1/bits/hashtable_policy.h:1103:22: error: no match
for call to '(const std::hash<std::valarray<long int> >) (const
std::valarray<long int>&)'
{ return _M_h1()(__k); }
^
/usr/include/c++/4.8.1/bits/hashtable_policy.h: In instantiation of
'std::__detail::_Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2,
std::__detail::_Default_ranged_hash, true>::_Hash_code_base(const
_ExtractKey&, const _H1&, const _H2&, const
std::__detail::_Default_ranged_hash&) [with _Key = std::valarray<long
int>; _Value = std::pair<const std::valarray<long int>, double>;
_ExtractKey = std::__detail::_Select1st; _H1 =
std::hash<std::valarray<long int> >; _H2 =
std::__detail::_Mod_range_hashing]':
/usr/include/c++/4.8.1/bits/hashtable_policy.h:1463:65: required from
'std::__detail::_Hashtable_base<_Key, _Value, _ExtractKey, _Equal, _H1,
_H2, _Hash, _Traits>::_Hashtable_base(const _ExtractKey&, const _H1&,
const _H2&, const _Hash&, const _Equal&) [with _Key = std::valarray<long
int>; _Value = std::pair<const std::valarray<long int>, double>;
_ExtractKey = std::__detail::_Select1st; _Equal =
std::equal_to<std::valarray<long int> >; _H1 =
std::hash<std::valarray<long int> >; _H2 =
std::__detail::_Mod_range_hashing; _Hash =
std::__detail::_Default_ranged_hash; _Traits =
std::__detail::_Hashtable_traits<true, false, true>]'
/usr/include/c++/4.8.1/bits/hashtable.h:828:24: required from
'std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2,
_Hash, _RehashPolicy, _Traits>::_Hashtable(std::_Hashtable<_Key, _Value,
_Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy,
_Traits>::size_type, const _H1&, const _H2&, const _Hash&, const
_Equal&, const _ExtractKey&, const allocator_type&) [with _Key =
std::valarray<long int>; _Value = std::pair<const std::valarray<long
int>, double>; _Alloc = std::allocator<std::pair<const
std::valarray<long int>, double> >; _ExtractKey =
std::__detail::_Select1st; _Equal = std::equal_to<std::valarray<long
int> >; _H1 = std::hash<std::valarray<long int> >; _H2 =
std::__detail::_Mod_range_hashing; _Hash =
std::__detail::_Default_ranged_hash; _RehashPolicy =
std::__detail::_Prime_rehash_policy; _Traits =
std::__detail::_Hashtable_traits<true, false, true>;
std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2,
_Hash, _RehashPolicy, _Traits>::size_type = unsigned int;
std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2,
_Hash, _RehashPolicy, _Traits>::allocator_type =
std::allocator<std::pair<const std::valarray<long int>, double> >]'
/usr/include/c++/4.8.1/bits/hashtable.h:397:26: required from
'std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2,
_Hash, _RehashPolicy, _Traits>::_Hashtable(std::_Hashtable<_Key, _Value,
_Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy,
_Traits>::size_type, const _H1&, const key_equal&, const
allocator_type&) [with _Key = std::valarray<long int>; _Value =
std::pair<const std::valarray<long int>, double>; _Alloc =
std::allocator<std::pair<const std::valarray<long int>, double> >;
_ExtractKey = std::__detail::_Select1st; _Equal =
std::equal_to<std::valarray<long int> >; _H1 =
std::hash<std::valarray<long int> >; _H2 =
std::__detail::_Mod_range_hashing; _Hash =
std::__detail::_Default_ranged_hash; _RehashPolicy =
std::__detail::_Prime_rehash_policy; _Traits =
std::__detail::_Hashtable_traits<true, false, true>;
std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2,
_Hash, _RehashPolicy, _Traits>::size_type = unsigned int;
std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2,
_Hash, _RehashPolicy, _Traits>::key_equal =
std::equal_to<std::valarray<long int> >; std::_Hashtable<_Key, _Value,
_Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy,
_Traits>::allocator_type = std::allocator<std::pair<const
std::valarray<long int>, double> >]'
/usr/include/c++/4.8.1/bits/unordered_map.h:142:35: required from
'std::unordered_map<_Key, _Tp, _Hash, _Pred,
_Alloc>::unordered_map(std::unordered_map<_Key, _Tp, _Hash, _Pred,
_Alloc>::size_type, const hasher&, const key_equal&, const
allocator_type&) [with _Key = std::valarray<long int>; _Tp = double;
_Hash = std::hash<std::valarray<long int> >; _Pred =
std::equal_to<std::valarray<long int> >; _Alloc =
std::allocator<std::pair<const std::valarray<long int>, double> >;
std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::size_type =
unsigned int; std::unordered_map<_Key, _Tp, _Hash, _Pred,
_Alloc>::hasher = std::hash<std::valarray<long int> >;
std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::key_equal =
std::equal_to<std::valarray<long int> >; std::unordered_map<_Key, _Tp,
_Hash, _Pred, _Alloc>::allocator_type = std::allocator<std::pair<const
std::valarray<long int>, double> >]'
unordered_map_CNode.cpp:20:36: required from here
/usr/include/c++/4.8.1/bits/hashtable_policy.h:1099:63: error: invalid
use of incomplete type 'struct std::hash<std::valarray<long int> >'
: __ebo_extract_key(__ex), __ebo_h1(__h1), __ebo_h2(__h2) { }
^
In file included from /usr/include/c++/4.8.1/bits/basic_string.h:3033:0,
from /usr/include/c++/4.8.1/string:52,
from /usr/include/c++/4.8.1/bits/locale_classes.h:40,
from /usr/include/c++/4.8.1/bits/ios_base.h:41,
from /usr/include/c++/4.8.1/ios:42,
from /usr/include/c++/4.8.1/ostream:38,
from /usr/include/c++/4.8.1/iostream:39,
from unordered_map_CNode.cpp:2:
/usr/include/c++/4.8.1/bits/functional_hash.h:58:12: error: declaration
of 'struct std::hash<std::valarray<long int> >'
struct hash;
^
In file included from /usr/include/c++/4.8.1/bits/hashtable.h:35:0,
from /usr/include/c++/4.8.1/unordered_map:47,
from unordered_map_CNode.cpp:3:
/usr/include/c++/4.8.1/bits/hashtable_policy.h:1099:63: error: invalid
use of incomplete type 'struct std::hash<std::valarray<long int> >'
: __ebo_extract_key(__ex), __ebo_h1(__h1), __ebo_h2(__h2) { }
^
In file included from /usr/include/c++/4.8.1/bits/basic_string.h:3033:0,
from /usr/include/c++/4.8.1/string:52,
from /usr/include/c++/4.8.1/bits/locale_classes.h:40,
from /usr/include/c++/4.8.1/bits/ios_base.h:41,
from /usr/include/c++/4.8.1/ios:42,
from /usr/include/c++/4.8.1/ostream:38,
from /usr/include/c++/4.8.1/iostream:39,
from unordered_map_CNode.cpp:2:
/usr/include/c++/4.8.1/bits/functional_hash.h:58:12: error: declaration
of 'struct std::hash<std::valarray<long int> >'
struct hash;
^
In file included from /usr/include/c++/4.8.1/string:48:0,
from /usr/include/c++/4.8.1/bits/locale_classes.h:40,
from /usr/include/c++/4.8.1/bits/ios_base.h:41,
from /usr/include/c++/4.8.1/ios:42,
from /usr/include/c++/4.8.1/ostream:38,
from /usr/include/c++/4.8.1/iostream:39,
from unordered_map_CNode.cpp:2:
/usr/include/c++/4.8.1/bits/stl_function.h: In instantiation of 'bool
std::equal_to<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp =
std::valarray<long int>]':
/usr/include/c++/4.8.1/bits/hashtable_policy.h:1166:72: required from
'static bool std::__detail::_Equal_helper<_Key, _Value, _ExtractKey,
_Equal, _HashCodeType, true>::_S_equals(const _Equal&, const
_ExtractKey&, const _Key&, _HashCodeType,
std::__detail::_Hash_node<_Value, true>*) [with _Key =
std::valarray<long int>; _Value = std::pair<const std::valarray<long
int>, double>; _ExtractKey = std::__detail::_Select1st; _Equal =
std::equal_to<std::valarray<long int> >; _HashCodeType = unsigned int]'
/usr/include/c++/4.8.1/bits/hashtable_policy.h:1470:23: required from
'bool std::__detail::_Hashtable_base<_Key, _Value, _ExtractKey, _Equal,
_H1, _H2, _Hash, _Traits>::_M_equals(const _Key&,
std::__detail::_Hashtable_base<_Key, _Value, _ExtractKey, _Equal, _H1,
_H2, _Hash, _Traits>::__hash_code, std::__detail::_Hashtable_base<_Key,
_Value, _ExtractKey, _Equal, _H1, _H2, _Hash, _Traits>::__node_type*)
const [with _Key = std::valarray<long int>; _Value = std::pair<const
std::valarray<long int>, double>; _ExtractKey =
std::__detail::_Select1st; _Equal = std::equal_to<std::valarray<long
int> >; _H1 = std::hash<std::valarray<long int> >; _H2 =
std::__detail::_Mod_range_hashing; _Hash =
std::__detail::_Default_ranged_hash; _Traits =
std::__detail::_Hashtable_traits<true, false, true>;
std::__detail::_Hashtable_base<_Key, _Value, _ExtractKey, _Equal, _H1,
_H2, _Hash, _Traits>::__hash_code = unsigned int;
std::__detail::_Hashtable_base<_Key, _Value, _ExtractKey, _Equal, _H1,
_H2, _Hash, _Traits>::__node_type =
std::__detail::_Hash_node<std::pair<const std::valarray<long int>,
double>, true>]'
/usr/include/c++/4.8.1/bits/hashtable.h:1165:4: required from
'std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2,
_Hash, _RehashPolicy, _Traits>::__node_base* std::_Hashtable<_Key,
_Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy,
_Traits>::_M_find_before_node(std::_Hashtable<_Key, _Value, _Alloc,
_ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy,
_Traits>::size_type, const key_type&, std::_Hashtable<_Key, _Value,
_Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy,
_Traits>::__hash_code) const [with _Key = std::valarray<long int>;
_Value = std::pair<const std::valarray<long int>, double>; _Alloc =
std::allocator<std::pair<const std::valarray<long int>, double> >;
_ExtractKey = std::__detail::_Select1st; _Equal =
std::equal_to<std::valarray<long int> >; _H1 =
std::hash<std::valarray<long int> >; _H2 =
std::__detail::_Mod_range_hashing; _Hash =
std::__detail::_Default_ranged_hash; _RehashPolicy =
std::__detail::_Prime_rehash_policy; _Traits =
std::__detail::_Hashtable_traits<true, false, true>;
std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2,
_Hash, _RehashPolicy, _Traits>::__node_base =
std::__detail::_Hash_node_base; std::_Hashtable<_Key, _Value, _Alloc,
_ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::size_type
= unsigned int; std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey,
_Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::key_type =
std::valarray<long int>; std::_Hashtable<_Key, _Value, _Alloc,
_ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy,
_Traits>::__hash_code = unsigned int]'
/usr/include/c++/4.8.1/bits/hashtable.h:604:65: required from
'std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2,
_Hash, _RehashPolicy, _Traits>::__node_type* std::_Hashtable<_Key,
_Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy,
_Traits>::_M_find_node(std::_Hashtable<_Key, _Value, _Alloc,
_ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy,
_Traits>::size_type, const key_type&, std::_Hashtable<_Key, _Value,
_Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy,
_Traits>::__hash_code) const [with _Key = std::valarray<long int>;
_Value = std::pair<const std::valarray<long int>, double>; _Alloc =
std::allocator<std::pair<const std::valarray<long int>, double> >;
_ExtractKey = std::__detail::_Select1st; _Equal =
std::equal_to<std::valarray<long int> >; _H1 =
std::hash<std::valarray<long int> >; _H2 =
std::__detail::_Mod_range_hashing; _Hash =
std::__detail::_Default_ranged_hash; _RehashPolicy =
std::__detail::_Prime_rehash_policy; _Traits =
std::__detail::_Hashtable_traits<true, false, true>;
std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2,
_Hash, _RehashPolicy, _Traits>::__node_type =
std::__detail::_Hash_node<std::pair<const std::valarray<long int>,
double>, true>; std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey,
_Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::size_type = unsigned
int; std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1,
_H2, _Hash, _RehashPolicy, _Traits>::key_type = std::valarray<long int>;
std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2,
_Hash, _RehashPolicy, _Traits>::__hash_code = unsigned int]'
/usr/include/c++/4.8.1/bits/hashtable.h:1025:55: required from
'std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2,
_Hash, _RehashPolicy, _Traits>::iterator std::_Hashtable<_Key, _Value,
_Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy,
_Traits>::find(const key_type&) [with _Key = std::valarray<long int>;
_Value = std::pair<const std::valarray<long int>, double>; _Alloc =
std::allocator<std::pair<const std::valarray<long int>, double> >;
_ExtractKey = std::__detail::_Select1st; _Equal =
std::equal_to<std::valarray<long int> >; _H1 =
std::hash<std::valarray<long int> >; _H2 =
std::__detail::_Mod_range_hashing; _Hash =
std::__detail::_Default_ranged_hash; _RehashPolicy =
std::__detail::_Prime_rehash_policy; _Traits =
std::__detail::_Hashtable_traits<true, false, true>;
std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2,
_Hash, _RehashPolicy, _Traits>::iterator =
std::__detail::_Node_iterator<std::pair<const std::valarray<long int>,
double>, false, true>; std::_Hashtable<_Key, _Value, _Alloc,
_ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::key_type
= std::valarray<long int>]'
/usr/include/c++/4.8.1/bits/unordered_map.h:543:29: required from
'std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::iterator
std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::find(const
key_type&) [with _Key = std::valarray<long int>; _Tp = double; _Hash =
std::hash<std::valarray<long int> >; _Pred =
std::equal_to<std::valarray<long int> >; _Alloc =
std::allocator<std::pair<const std::valarray<long int>, double> >;
std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::iterator =
std::__detail::_Node_iterator<std::pair<const std::valarray<long int>,
double>, false, true>; std::unordered_map<_Key, _Tp, _Hash, _Pred,
_Alloc>::key_type = std::valarray<long int>]'
unordered_map_CNode.cpp:40:72: required from here
/usr/include/c++/4.8.1/bits/stl_function.h:208:23: error: cannot convert
'std::_Expr<std::_BinClos<std::__equal_to, std::_ValArray,
std::_ValArray, long int, long int>, bool>' to 'bool' in return
{ return __x == __y; }