Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.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++_Error Handling_Hashset - Fatal编程技术网

C++ 如何正确使用C++;

C++ 如何正确使用C++;,c++,error-handling,hashset,C++,Error Handling,Hashset,我试图创建一个散列集来保存不同文件的名称,如下所示: struct eq { bool operator()(const char* c1, const char* c2) { return strcmp(c1, c2) == 0; } }; int main(int argc, char* argv[]) { hash_set<const char*, hash<const char*>, eq> fileNames;

我试图创建一个
散列集
来保存不同文件的名称,如下所示:

struct eq {
    bool operator()(const char* c1, const char* c2) {
        return strcmp(c1, c2) == 0;
    }
};

int main(int argc, char* argv[])
{

    hash_set<const char*, hash<const char*>, eq> fileNames;
    return 0;
}
struct eq{
布尔运算符()(常量字符*c1,常量字符*c2){
返回strcmp(c1,c2)==0;
}
};
int main(int argc,char*argv[])
{
散列设置文件名;
返回0;
}
这给了我很多编译器错误,包括:

Error   1   error C2039 : 'bucket_size' : is not a member of 'std::hash<const char *>'  C : \Program Files(x86)\xDev\Microsoft Visual Studio 12.0\VC\include\xhash  264 1   Tests
Error   2   error C2065 : 'bucket_size' : undeclared identifier C : \Program Files(x86)\xDev\Microsoft Visual Studio 12.0\VC\include\xhash  264 1   Tests
Error   3   error C2039 : 'value_type' : is not a member of 'eq'    C : \Program Files(x86)\xDev\Microsoft Visual Studio 12.0\VC\include\xmemory0   419 1   Tests
Error   4   error C2146 : syntax error : missing ';' before identifier 'value_type' C : \Program Files(x86)\xDev\Microsoft Visual Studio 12.0\VC\include\xmemory0   419 1   Tests
Error   5   error C4430 : missing type specifier - int assumed.Note : C++ does not support default - int    C : \Program Files(x86)\xDev\Microsoft Visual Studio 12.0\VC\include\xmemory0   419 1   Tests
Error   6   error C2602 : 'std::allocator_traits<_Alloc>::value_type' is not a member of a base class of 'std::allocator_traits<_Alloc>'    C :\Program Files(x86)\xDev\Microsoft Visual Studio 12.0\VC\include\xmemory0    419 1   Tests
Error   7   error C2146 : syntax error : missing ',' before identifier 'value_type' C : \Program Files(x86)\xDev\Microsoft Visual Studio 12.0\VC\include\xmemory0   242 1   Tests
Error   8   error C2065 : 'value_type' : undeclared identifier  C : \Program Files(x86)\xDev\Microsoft Visual Studio 12.0\VC\include\xmemory0   242 1   Tests
Error   9   error C2059 : syntax error : '>'    C : \Program Files(x86)\xDev\Microsoft Visual Studio 12.0\VC\include\xmemory0   242 1   Tests
...
Error 1 Error C2039:“bucket\u size”:不是“std::hash”C:\Program Files(x86)\xDev\Microsoft Visual Studio 12.0\VC\include\xhash 264 1测试的成员
错误2错误C2065:“bucket\u size”:未声明的标识符C:\Program Files(x86)\xDev\Microsoft Visual Studio 12.0\VC\include\xhash 264 1测试
错误3错误C2039:“值类型”:不是“eq”C:\Program Files(x86)\xDev\Microsoft Visual Studio 12.0\VC\include\xmemory0 419 1测试的成员
错误4错误C2146:语法错误:缺少“;”在标识符“value\u type”之前,C:\Program Files(x86)\xDev\Microsoft Visual Studio 12.0\VC\include\xmemory0 419 1测试
错误5 C44:缺少类型指定符-int假设。注释:C++不支持默认-int c:\程序文件(x86)\xDe\\Visual Studio 12 \\vc\\\xMeMyY0 419 419 1测试
错误6错误C2602:“std::allocator\u traits::value\u type”不是“std::allocator\u traits”C:\Program Files(x86)\xDev\Microsoft Visual Studio 12.0\VC\include\xmemory0 419 1测试的基类的成员
错误7错误C2146:语法错误:缺少“,”之前标识符“值\u类型”C:\Program Files(x86)\xDev\Microsoft Visual Studio 12.0\VC\include\xmemory0 242 1测试
错误8错误C2065:“值类型”:未声明的标识符C:\Program Files(x86)\xDev\Microsoft Visual Studio 12.0\VC\include\xmemory0 242 1测试
错误9错误C2059:语法错误:'>'C:\ProgramFiles(x86)\xDev\Microsoft Visual Studio 12.0\VC\include\xmemory0 242 1测试
...

散列集是Visual Studio中不推荐使用的类型。它需要的模板参数与您提供的不同

您实际应该使用的(以及将(或多或少)使用您的参数的)是
std::unordered\u set

#include <cstring>
#include <unordered_set>

using namespace std;

struct eq {
    bool operator()(const char* c1, const char* c2) {
        return strcmp(c1, c2) == 0;
    }
};

int main(int argc, char* argv[])
{
    unordered_set<const char*, hash<const char*>, eq> fileNames;
    return 0;
}

还可以看到这一点,为什么使用
const char*
作为
std::unordered_map
的键是个坏主意。实际上,您还必须提供自己的哈希函数,并负责密钥的分配和解除分配。

什么是
hash\u集
?您是否错过了在代码中包含某些内容?是的,我包含:#包含。哈希集是visual studio唯一能识别的东西。你从哪里得到它的
hash_set
不是标准的,因此它必须来自其他库。C++11的无序集如何?如果不知道您的
hash\u集
has\u集
是Visual studio类型,我认为我们无法提供帮助。我的猜测是,您想实际使用
std::unordered\u set
请不要使用仅包含文本的图片。这使得搜索索引和视力受损人群阅读变得更加困难。FWIW,即使在现代显示器上,我也看不懂上面的文字。@BobSacamano:那有什么问题?我打赌这与使用
constchar*
作为键类型(而不是std::string)有关,因为这会带来您必须处理的所有其他问题。
#include <unordered_set>
#include <string>

int main(int argc, char* argv[])
{
    std::unordered_set<std::string> fileNames;

}