如何在字符串列表中查找匹配的字符串

WSk*_*ner 1 c++

我正在学习c ++,并想知道下面做的最好或最惯用的方法是什么.我有一个已知的已接受字符串列表,这些字符串对于程序来说是不变的.我想知道提供给函数的字符串是否在我接受的字符串列表中.我提出了:

bool match(const char* foo, const char* bar) {
    return strcmp(foo, bar) == 0;
}

bool thingIsValid(const char* thing) {
    return match("foo", thing) || match("bar", thing) || match("baz", thing);
}

...
thingIsValid(someArg.c_str());
...
Run Code Online (Sandbox Code Playgroud)

这种方法似乎更像是我的C语言.在其他语言中,我可能只有一个列表并在该列表上执行.contains(thing).人们通常如何在C++中做到这一点?

Pet*_*man 6

这些天最好的方法可能是使用无序集合:

std::unordered_set<std::string> ValidValues {"one", "two", "three"};

if( ValidValues.find( testString ) == ValidValues.end() ) {
    // String is not valid...
}
Run Code Online (Sandbox Code Playgroud)

这里唯一真正的缺点是你不能简单地在可执行映像中布置有效的字符串.(设置集需要初始化代码和堆分配.)但对于绝大多数应用程序而言,这并不重要.