Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无序映射无法在工作C+中初始化+;?_C++_C++11 - Fatal编程技术网

C++ 无序映射无法在工作C+中初始化+;?

C++ 无序映射无法在工作C+中初始化+;?,c++,c++11,C++,C++11,问题:给定一组字符串str,将这些字谜组合在一起。您可以按任意顺序返回答案 字谜是通过重新排列不同单词或短语的字母而形成的单词或短语,通常只使用一次所有原始字母 Example 1: Input: strs = ["eat","tea","tan","ate","nat","bat"] Output: [["bat"],["nat",&

问题:给定一组字符串str,将这些字谜组合在一起。您可以按任意顺序返回答案

字谜是通过重新排列不同单词或短语的字母而形成的单词或短语,通常只使用一次所有原始字母

Example 1:

Input: strs = ["eat","tea","tan","ate","nat","bat"]
Output: [["bat"],["nat","tan"],["ate","eat","tea"]]
代码:

类解决方案
{
公众:
向量组分析图(向量和STR)
{
无序地图mp1;
适用于(c:strs)
{
无序多集ms1;
for(字符h:c)
m1.插入(h);
mp1[ms1]。推回(c);
}
向量res;
用于(自动c:mp1)
res.向后推(c.秒);
返回res;
}
};
错误:

Line 6: Char 67: error: call to implicitly-deleted default constructor of 'unordered_map<unordered_multiset<char>, vector<std::string>>' (aka 'unordered_map<unordered_multiset<char>, vector<basic_string<char>>>')
        unordered_map <unordered_multiset <char>, vector<string>> mp1;
                                                                  ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/unordered_map.h:141:7: note: explicitly defaulted function was implicitly deleted here
      unordered_map() = default;
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/unordered_map.h:105:18: note: default constructor of 'unordered_map<std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>, std::vector<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>, std::hash<std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>>, std::equal_to<std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>>, std::allocator<std::pair<const std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>, std::vector<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>>>>' is implicitly deleted because field '_M_h' has a deleted default constructor
      _Hashtable _M_h;
                 ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/hashtable.h:414:7: note: explicitly defaulted function was implicitly deleted here
      _Hashtable() = default;
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/hashtable.h:174:7: note: default constructor of '_Hashtable<std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>, std::pair<const std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>, std::vector<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>>, std::allocator<std::pair<const std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>, std::vector<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>>>, std::__detail::_Select1st, std::equal_to<std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>>, std::hash<std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true>>' is implicitly deleted because base class '__detail::_Hashtable_base<unordered_multiset<char, hash<char>, equal_to<char>, allocator<char>>, pair<const unordered_multiset<char, hash<char>, equal_to<char>, allocator<char>>, vector<basic_string<char>, allocator<basic_string<char>>>>, _Select1st, equal_to<unordered_multiset<char, hash<char>, equal_to<char>, allocator<char>>>, hash<unordered_multiset<char, hash<char>, equal_to<char>, allocator<char>>>, _Mod_range_hashing, _Default_ranged_hash, _Hashtable_traits<true, false, true>>' has a deleted default constructor
    : public __detail::_Hashtable_base<_Key, _Value, _ExtractKey, _Equal,
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/hashtable_policy.h:1822:5: note: explicitly defaulted function was implicitly deleted here
    _Hashtable_base() = default;
    ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/hashtable_policy.h:1771:5: note: default constructor of '_Hashtable_base<std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>, std::pair<const std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>, std::vector<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>>, std::__detail::_Select1st, std::equal_to<std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>>, std::hash<std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Hashtable_traits<true, false, true>>' is implicitly deleted because base class '_Hash_code_base<std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>, std::pair<const std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>, std::vector<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>>, std::__detail::_Select1st, std::hash<std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, _Hashtable_traits<true, false, true>::__hash_cached::value>' has a deleted default constructor
  : public _Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2, _Hash,
    ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/hashtable_policy.h:1373:7: note: explicitly defaulted function was implicitly deleted here
      _Hash_code_base() = default;
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/hashtable_policy.h:1349:7: note: default constructor of '_Hash_code_base<std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>, std::pair<const std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>, std::vector<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>>, std::__detail::_Select1st, std::hash<std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, true>' is implicitly deleted because base class '_Hashtable_ebo_helper<1, std::hash<std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>>>' has a deleted default constructor
      private _Hashtable_ebo_helper<1, _H1>,
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/hashtable_policy.h:1096:7: note: explicitly defaulted function was implicitly deleted here
      _Hashtable_ebo_helper() = default;
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/hashtable_policy.h:1094:7: note: default constructor of '_Hashtable_ebo_helper<1, std::hash<std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>>, true>' is implicitly deleted because base class 'std::hash<std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>>' has a deleted default constructor
    : private _Tp
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/functional_hash.h:101:19: note: default constructor of 'hash<std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>>' is implicitly deleted because base class '__hash_enum<std::unordered_multiset<char, std::hash<char>, std::equal_to<char>, std::allocator<char>>>' has no default constructor
    struct hash : __hash_enum<_Tp>
                  ^
第6行:Char 67:错误:调用隐式删除的“无序映射”(又称“无序映射”)的默认构造函数
无序地图mp1;
^
/usr/bin/./lib/gcc/x86_64-linux-gnu/9/../../../../../../../include/c++/9/bits/unordered_map.h:141:7:注意:此处隐式删除了显式默认函数
无序_map()=默认值;
^
/usr/bin/./lib/gcc/x86_64-linux-gnu/9/../../../../../../../../include/c++/9/bits/unordered_map.h:105:18:注意:“unordered_map”的默认构造函数被隐式删除,因为字段“\M_h”有一个已删除的默认构造函数
_哈希表;
^
/usr/bin/./lib/gcc/x86_64-linux-gnu/9/../../../../../../../include/c++/9/bits/hashtable.h:414:7:注意:此处隐式删除了显式默认函数
_Hashtable()=默认值;
^
/usr/bin/./lib/gcc/x86_64-linux-gnu/9/../../../../../../../include/c++/9/bits/hashtable.h:174:7:注意:“_hashtable”的默认构造函数被隐式删除,因为基类“u detail::_hashtable_base”有一个已删除的默认构造函数

:public\uu detail::\u Hashtable\u base
unordered\u map
要求密钥类型具有哈希函数。在这种情况下,它是
unordered\u multiset
,但是对于
unordered\u multiset
没有
std::hash
专门化。为了使用它,您需要制作自己的哈希程序


这里的错误消息不是最大的,但这就是所指的。

unordered\u map
要求密钥类型有一个哈希函数。在这种情况下,它是
unordered\u multiset
,但是对于
unordered\u multiset
没有
std::hash
专门化。为了使用它,您需要制作自己的哈希程序


这里的错误消息并不是最大的,但这正是所暗示的。

您不能像在
无序映射中那样使用
无序多集
,因为它没有
std::hash
专门化

您可以专门化
std::hash
,也可以为
无序的\u multiset
提供自己的哈希函数

但实际上不需要这些,因为您可以使用排序的
字符串作为键:

vector<vector<string>> groupAnagrams(vector<string> &strs)
{
    map <string, vector<string>> mp1;
    for (auto &s : strs) {
        string sc = s;
        sort(begin(sc), end(sc));
        mp1[sc].push_back(s);
    }
    vector<vector<string>> res;
    for (auto &c : mp1) {
        res.push_back(c.second);
    }
    return res;
}
vector-groupanagram(vector&strs)
{
地图mp1;
用于(自动和s:strs){
字符串sc=s;
排序(开始(sc)、结束(sc));
mp1[sc]。推回(s);
}
向量res;
用于(自动和控制:mp1){
res.向后推(c.秒);
}
返回res;
}

您不能使用
无序\u多集
作为
无序\u映射
中的键,因为它没有
std::hash
专门化

您可以专门化
std::hash
,也可以为
无序的\u multiset
提供自己的哈希函数

但实际上不需要这些,因为您可以使用排序的
字符串作为键:

vector<vector<string>> groupAnagrams(vector<string> &strs)
{
    map <string, vector<string>> mp1;
    for (auto &s : strs) {
        string sc = s;
        sort(begin(sc), end(sc));
        mp1[sc].push_back(s);
    }
    vector<vector<string>> res;
    for (auto &c : mp1) {
        res.push_back(c.second);
    }
    return res;
}
vector-groupanagram(vector&strs)
{
地图mp1;
用于(自动和s:strs){
字符串sc=s;
排序(开始(sc)、结束(sc));
mp1[sc]。推回(s);
}
向量res;
用于(自动和控制:mp1){
res.向后推(c.秒);
}
返回res;
}
来自参考

你可能需要这样的东西

struct KeyHash {
        std::size_t operator()(const unordered_multiset <char>& k) const
        {
                // hashing logic
                return 0;
        }
};

struct KeyEqual {
 bool operator()(const unordered_multiset <char>& lhs, const unordered_multiset <char>& rhs) const
 {
        //Compare Logic
        return 0;
 }
};
struct-KeyHash{
std::size\u t运算符()(常量无序\u多集&k)常量
{
//散列逻辑
返回0;
}
};
结构键相等{
布尔运算符()
{
//比较逻辑
返回0;
}
};
然后

unordered_map <unordered_multiset <char>, vector<string>, KeyHash, KeyEqual> mp1;
无序地图mp1;
来自参考

你可能需要这样的东西

struct KeyHash {
        std::size_t operator()(const unordered_multiset <char>& k) const
        {
                // hashing logic
                return 0;
        }
};

struct KeyEqual {
 bool operator()(const unordered_multiset <char>& lhs, const unordered_multiset <char>& rhs) const
 {
        //Compare Logic
        return 0;
 }
};
struct-KeyHash{
std::size\u t运算符()(常量无序\u多集&k)常量
{
//散列逻辑
返回0;
}
};
结构键相等{
布尔运算符()
{
//比较逻辑
返回0;
}
};
然后

unordered_map <unordered_multiset <char>, vector<string>, KeyHash, KeyEqual> mp1;
无序地图mp1;

unordered\u multiset
不能用作
unordered\u map
的键,因为没有为其定义哈希函数。
unordered\u multiset
不能用作
unordered\u map
的键,因为没有定义哈希函数。<代码>这里错误消息不是最大的,< C++ >一个经典的低调,我们似乎接受C++程序员:-非常感谢帮助<代码>错误消息不是这里最大的< /COD>一个经典的低调,作为C++程序员我们似乎接受:-谢谢你对于帮助,
unordered\u multiset
确实有一个
操作符==
,因此只有当您希望行为与默认行为不同时才真正需要
KeyEqual
。谢谢@u\u
unordered_multiset
确实有一个
操作符==
,因此只有当您希望行为与默认行为不同时才需要
KeyEqual
。谢谢@u_uu!!!!哦,谢谢!这真的很有帮助。哦,谢谢!这真的很有帮助。