我想创建一个,以便我可以使用 set::find 检查某个单词是否在集合中
但是,C 字符串是指针,因此默认情况下集合会根据指针值比较它们。要正常运行,它必须取消引用它们并比较字符串。
我可以向构造函数传递一个指向 strcmp() 函数的指针作为比较器,但这并不是我想要的工作方式。我可能想要检查的词可能是较长字符串的一部分,并且出于性能方面的考虑,我不想创建新字符串。如果没有集合,我会使用 strncmp(a1, a2, 3) 检查前 3 个字母。事实上,3 可能是最长的,所以我可以接受第三个参数常量。
有没有办法构造一个集合,通过调用 strncmp() 来比较其元素?代码示例将不胜感激。
这是我想做的伪代码:
bool WordInSet (string, set, length)
{
for (each word in set)
{
if strncmp(string, word, length) == 0
return true;
}
return false;
}
但我更愿意使用标准库函数来实现它。
最佳答案
您可以创建一个比较器函数对象。
struct set_object {
bool operator()(const char* first, const char* second) {
return strncmp(first, second, 3);
}
};
std::set<const char*, set_object> c_string_set;
然而,制作一组 std::strings
会更容易、更可靠。 .
关于C++:C 字符串集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4530543/