使用具有两个字段的结构体和使用pair之间在内存分配和效率方面有什么区别?
std::pair
提供了预先编写的构造函数和比较运算符。这使得它们可以被存储在像 std::map 这样的容器中,而无需编写例如拷贝构造函数或通过 operator <
(例如 std::map 所要求的严格弱排序)来实现。如果您不编写它们,就不会犯错误(记住严格弱排序是如何工作的吗?),因此最可靠的方法就是使用 std::pair
。
std::pair
提供了多个构造函数和运算符。
struct
允许使用除first
和second
之外的命名字段,并且可以随时扩展。
尽可能使用struct
。虽然可能会存在一些额外开销,但维护起来肯定更加容易。
就内存分配和效率而言,没有什么区别——因为这正是std::pair
的作用。
如果您想要自己的名称的好处,但又想利用std::pair(或任何其他对象)的优势,则可以使用“using”(从c ++ 11开始)。 您可以在命名空间或类声明中设置此选项。
实际上,这就是我许多类的起点...
using myPair = pair<int,string>;
参见C++ reference获取更多文档。
.first
和.second
的问题。 - infinitezero在内存分配或效率方面没有区别。实际上,在我使用的STL实现中,pair被定义为struct pair
。
pair
中的first
和second
),那么它必须是一个struct
。 - Manuelpublic
部分声明了first
和second
的class
。根据接口,first
和second
成员必须是公共的;并没有说明它必须是一个class
还是struct
。 - Thomas Matthewsstruct X { ... };
和 class X { public: ... };
之间,从语义上讲没有任何区别。(与 C# 不同。) - j_random_hacker
pair
提供了一个默认构造函数和一个模板复制构造函数。这很有道理——这样,在每种情况下,只要底层类型允许,pair
就允许调用它。 - j_random_hackerstd::make_pair()
,在许多情况下非常方便,特别是与auto
的新含义相结合时。 - sbi