gpt4 book ai didi

c++ - 我应该为 map 中的两个智能指针对制作自己的比较器吗?

转载 作者:太空狗 更新时间:2023-10-29 21:44:59 24 4
gpt4 key购买 nike

我正在尝试创建一个模板图形类,因此我需要以某种方式存储边。我想,如果我可以通过两个 Node 智能指针访问 EdgeValue 可能会很棒。但我实际上并不知道,如何让它发挥作用。现在是这样的:

template <class Node, class EdgeValue>
class Graph
{
typedef std::shared_ptr < Node > NodePtr;
std::map < std::pair < NodePtr, NodePtr > , EdgeValue> Edges;
}

但我很确定,这是行不通的。我应该创建比较类还是函数?它应该是模板吗?实际上,如何比较智能指针?

最佳答案

所以 std::pair有一个 operator<按字典顺序排列其内容。

它首先按第一个元素排序,除非第一个元素相等:如果相等,则按第二个元素排序。

这有点像我们对两个字母单词进行排序的方式。 (std::tuple 将其扩展到 n 长度的元素)。

std::shared_ptr通过它存储的原始指针对自身(operator< 有时称为“排序”运算符)进行排序(从技术上讲,通过它存储的指针上的 std::less,因为不能保证指针上的 < 表现良好,而std::less 保证表现良好)。

在这两者之间,什么<std::pair< std::shared_ptr, std::shared_ptr >确实是按第一个对象标识排序,然后是 pair 的第二个元素.其中,在 Node 的情况下图表中的 s,通常是您想要的。

如果您想按 Node内容 订购,而不是 Node身份 , 你必须为你的 std::map 提供比较功能(或者,理论上,重写 operator< ,但我不会在基于基本类型的双层 std 构造上这样做)。

关于c++ - 我应该为 map 中的两个智能指针对制作自己的比较器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18681838/

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