C++ 使用带有两个字段的结构和一对字段有什么区别?

C++ 使用带有两个字段的结构和一对字段有什么区别?,c++,struct,std,std-pair,C++,Struct,Std,Std Pair,在内存分配和效率方面,使用带有两个字段和一对字段的结构有什么区别?std::pair提供了预先编写的构造函数和比较运算符。这还允许它们存储在诸如std::map之类的容器中,而无需编写复制构造函数或通过操作符在内存分配和效率方面严格弱排序,没有区别——因为这正是std::pair的含义。在内存分配或效率方面没有区别。事实上,在我使用的STL实现中,pair被定义为struct pairstd::pair带有许多构造函数和操作符 struct允许命名字段(除了第一个和第二个之外),并且随时可以扩展

在内存分配和效率方面,使用带有两个字段和一对字段的结构有什么区别?

std::pair
提供了预先编写的构造函数和比较运算符。这还允许它们存储在诸如std::map之类的容器中,而无需编写复制构造函数或通过
操作符在内存分配和效率方面严格弱排序,没有区别——因为这正是
std::pair
的含义。

在内存分配或效率方面没有区别。事实上,在我使用的STL实现中,pair被定义为
struct pair

std::pair
带有许多构造函数和操作符

struct
允许命名字段(除了
第一个
第二个
之外),并且随时可以扩展


如果可以,请选择
struct
。它可能会涉及一些开销,但肯定更易于维护。

如struct中所述,可能会快一点,因为没有进行初始化。

如上所述,如果您想从自己的名称中获益,但要利用std::pair(或任何其他对象)的优点,可以使用“using”(从c++11开始). 您可以在名称空间或类声明中设置它

事实上这就是我现在开始上课的次数

using myPair = pair<int,string>;
使用myPair=pair;

cf.

您使用的是什么STL实现?我使用的是VC9编译器附带的实现。是的,这遵循了一个常见的约定,即如果用户定义的类型公开公共数据成员(如
pair
使用
first
second
)然后它必须是
结构
。可以是
,在
公共
部分声明了
第一个
第二个
。根据界面,第一个
和第二个成员必须是公共的;没有说明它是否必须是
结构
@thomasmatthews:
结构X{…}之间没有任何语义差异
类X{public:…}。(与C#中的例子不同)这正是我想知道的答案,我突然意识到效率实际上取决于你将要做什么,因为信息太多了。我将接受AshleysBrain的问题,以供进一步思考……没问题,但如果您感兴趣的话,询问比较易用性会更有意义。纳文和我都回答了上面提到的问题。(不是抱怨,只是说…)嗯,我的评论似乎有严重的打字错误。“这就是我想知道的答案”应该是。我给了阿什利斯伯伦一个被接受的答案,因为他很快,给了一个很好的答案,就像你一样。这很难选择,但我选择了最有利的一个。是否有一个源文件/头显示pair在内部作为结构进行编码?@Basj:我手头没有C++09标准,但我相信这是标准所要求的。我不认为std::pair为其成员提供任何构造函数或运算符。你到底在想什么?@Manuel,事实上我刚刚检查过,果然,
pair
提供了一个默认的ctor和一个模板副本ctor。有意义——这样,在每种情况下,
pair
都允许在底层类型允许的情况下调用它。是的,但OP似乎暗示std::pair神奇地为底层类型生成了这些成员。奇怪的是,这个答案被接受了。措辞本可以再好一点,但我确实认为AshleysBrain知道他在说什么。编辑以尝试澄清措辞。维护意见+1。我与一组来自新泽西州的工程师一起工作,他们试图用STL做所有事情(我指的是所有事情),而不是在设计要求时创建适当的类/结构,而是使用STL容器。代码中充斥着“if(route.first.second[*iter].first){…}”。啊!