搜索指向类的std::指针集
C++: Searching a std::set of pointers to class
昨天我问了一个类似的问题,我有时间思考和更好地解释(我也在试图找出问题的过程中取得了一些进展),所以是这样的:
有一个类State
和一个类Node
。Node
包含一个指向State
的指针作为成员:
class State{
public:
int a;
int b;
State(int a1, int b1){
a = a1;
b = b1;
}
};
class Node{
public:
State *s;
Node(State *s1){
s = s1;
}
Node(){
s = NULL;
}
};
int main() {
State *s = new State(5, 6);
State *z = new State(5, 6);
Node *n = new Node(s);
set<State*> states;
states.insert(s);
cout<<states.count(z);
return 0;
}
你可以在main
中看到,我创建了两个指向State
的相同指针,将一个插入到集合中,然后使用state::count
(找到返回1,未找到返回0)在states
中查找与z
相同的State
。这个应该返回1,但它返回0。起初我认为这是因为我需要重载States
之间的比较器,但即使在编写了这个函数之后:
bool operator==(const State &s1, const State &s2){
if(s1.a == s2.a && s1.b == s2.b)
return true;
else
return false;
}
返回0。我的下一个想法是,因为这是一组指向State
的指针,而不是实际的对象,因为我的==重载被绕过了。所以我试着这样做:
int main() {
State *s = new State(5, 6);
State *z = new State(5, 6);
Node *n = new Node(s);
set<State> states;
states.insert(*s);
cout<<states.count(*z);
return 0;
}
这里有一个运行的例子:http://ideone.com/iYQyBK
我的想法是有一组State
而不是指向State
的指针,然后对指针进行解引用,但不幸的是,这个新代码给了我各种丑陋的编译错误,这些错误非常模糊,似乎与比较期间的失败有关,但我真的不能告诉他们是什么意思。我最好的举动是什么让set::count
正常工作(或找到其他方法来检查State
是否在我的set
中)?
std::set
要求严格排序:
bool operator<(const State &lhs, const State &rhs){
return std::tie(lhs.a, lhs.b) < std::tie(rhs.a, rhs.b);
}
和
int main() {
State s(5, 6);
State z(5, 6);
Node n(&s);
std::set<State> states;
states.insert(s);
std::cout << states.count(z);
}
相关文章:
- 如何从 std::atomic 中提取指针 T<T>?
- std::vector::迭代器是否可以合法地作为指针
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 如何调用存储在指向"std::函数"的指针中的 lambda?
- 如何使用 std::make_shared 创建基类类型的智能指针?
- 如何将唯一指针的 std::vector 转换为原始指针的 std::span?
- 编译器不会使用 -std=c++11 编译智能指针
- 我无法使用C++指针指向类方法返回的 std::vector
- std::byte 指针应该用于指针算术吗?
- std::unordered_map::提取引用/指针失效
- std::less是否应该允许在编译时比较不相关的指针?
- 指向基类派生类的 std::unique_ptr 的指针
- std::排序在共享指针的向量上
- 检查输入 std::array 指针数据是否等于某个常量数组
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 在称为函数内更改功能指针(STD ::函数)安全吗?
- 继承和智能指针(std::shared_ptr)
- 指针指针:std:vector vs. 数组
- 智能指针std::对的元素