gpt4 book ai didi

c++ - STL 搜索

转载 作者:行者123 更新时间:2023-11-27 22:52:33 25 4
gpt4 key购买 nike

我想存储唯一的字符串并检测重复项。我以为我会为此使用 STL 集容器,但我的字符串是 char*所以我做了set<char *>但是当我想搜索一个项目时,我该怎么做呢?因为它比较的是指针值而不是值。

最佳答案

std::set 只要您可以提供“一个元素小于另一个元素”的合理定义,就可以使用它。为了使此功能尽可能灵活,它有一个模板参数,默认为 std::less<T>并且表示要使用的小于比较函数。

换句话说, std::set<char*>std::set<char*, std::less<char*>> 的缩写 [*]

std::less<T>是一个有点“神奇”的仿函数,因为它允许安全地比较指针并获得定义的比较结果(令人惊讶的是,如果您直接通过 < 比较指针,情况并非如此)。

不过,这对您没有帮助。您根本不想比较指针,您想要取消引用指针并检查它们指向的值。

为此,只需实例化 std::set带有比较参数的模板正是这样做的。基于指针的 std::strcmp C 函数可帮助您执行实际比较。这是一个例子:

struct CStringPointerComparison
{
bool operator()(char const* lhs, char const* rhs) const
{
return std::strcmp(lhs, rhs) < 0;
}
};

std::set<char*, CStringPointerComparison> my_set;

[*] std::set<char*, std::less<char*>, std::allocator<char*>> 本身的缩写,但分配器在这里并不重要。

关于c++ - STL <set> 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36116550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com