This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

unordered_map with valarray as key


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; }




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]