Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        5年前关闭。
                                                                                            
                
        
我有两个整数,我想创建一个将两个整数映射到另一个整数的哈希映射。

为了做到这一点,我创建了以下程序,但是它给了我错误:

#include <iostream>
#include <unordered_map>

using namespace std;

int main()
{
    std::pair <int, int> var1;
    var1=std::make_pair(10,20);
    cout<<"\n var1.f="<<var1.first<<"\t 2."<<var1.second<<"\n";
    std::unordered_map <std::pair <int,int>, int> yeah;

   return 0;
}


有什么方法可以消除错误?
有某种方法可以以可扩展的方式进行相同操作吗?

错误:

n file included from /usr/local/gcc-4.8.1/include/c++/4.8.1/bits/hashtable.h:35:0,
                 from /usr/local/gcc-4.8.1/include/c++/4.8.1/unordered_map:47,
                 from main.cpp:2:
/usr/local/gcc-4.8.1/include/c++/4.8.1/bits/hashtable_policy.h: In instantiation of ‘struct std::__detail::_Hash_code_base<std::pair<int, int>, std::pair<const std::pair<int, int>, int>, std::__detail::_Select1st, std::hash<std::pair<int, int> >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, true>’:
/usr/local/gcc-4.8.1/include/c++/4.8.1/bits/hashtable_policy.h:1402:10:   required from ‘struct std::__detail::_Hashtable_base<std::pair<int, int>, std::pair<const std::pair<int, int>, int>, std::__detail::_Select1st, std::equal_to<std::pair<int, int> >, std::hash<std::pair<int, int> >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Hashtable_traits<true, false, true> >’
/usr/local/gcc-4.8.1/include/c++/4.8.1/bits/hashtable.h:174:11:   required from ‘class std::_Hashtable<std::pair<int, int>, std::pair<const std::pair<int, int>, int>, std::allocator<std::pair<const std::pair<int, int>, int> >, std::__detail::_Select1st, std::equal_to<std::pair<int, int> >, std::hash<std::pair<int, int> >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >’
/usr/local/gcc-4.8.1/include/c++/4.8.1/bits/unordered_map.h:100:18:   required from ‘class std::unordered_map<std::pair<int, int>, int>’
main.cpp:12:50:   required from here
/usr/local/gcc-4.8.1/include/c++/4.8.1/bits/hashtable_policy.h:1070:12: error: invalid use of incomplete type ‘struct std::hash<std::pair<int, int> >’
     struct _Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2,
            ^
In file included from /usr/local/gcc-4.8.1/include/c++/4.8.1/bits/basic_string.h:3033:0,
                 from /usr/local/gcc-4.8.1/include/c++/4.8.1/string:52,
                 from /usr/local/gcc-4.8.1/include/c++/4.8.1/bits/locale_classes.h:40,
                 from /usr/local/gcc-4.8.1/include/c++/4.8.1/bits/ios_base.h:41,
                 from /usr/local/gcc-4.8.1/include/c++/4.8.1/ios:42,
                 from /usr/local/gcc-4.8.1/include/c++/4.8.1/ostream:38,
                 from /usr/local/gcc-4.8.1/include/c++/4.8.1/iostream:39,
                 from main.cpp:1:
/usr/local/gcc-4.8.1/include/c++/4.8.1/bits/functional_hash.h:58:12: error: declaration of ‘struct std::hash<std::pair<int, int> >’
     struct hash;
            ^
In file included from /usr/local/gcc-4.8.1/include/c++/4.8.1/bits/hashtable.h:35:0,
                 from /usr/local/gcc-4.8.1/include/c++/4.8.1/unordered_map:47,
                 from main.cpp:2:

最佳答案

我认为错误是类似“ C ++标准没有为此类型提供哈希”的东西吗?问题在于,在无序映射中用作键的任何内容都必须是可哈希的,并且pair<int, int>没有内置的哈希函数。有两种可能:

-为pair<int, int>编写自己的哈希器,并将其用作unordered_map的第三个模板参数。 This post也许可以帮助您。

-改用std::unordered_map<int, std::unordered_map<int, int>>。执行操作时,请小心不要意外创建内部地图的副本。

-使用map代替unordered_map。这将为您提供对数运算,而不是恒定时间,但是除非地图很大且您每秒要进行大量查找,否则您不会注意到差异。

根据您的编辑进行编辑:是的,这就是这些错误消息的含义,尽管他们没有像Microsoft的编译器那样友好地说出来。 :)

关于c++ - 将两个整数映射到另一个整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23269167/

10-11 01:09