将成员保存在数据结构中的另一种方法

Posted

技术标签:

【中文标题】将成员保存在数据结构中的另一种方法【英文标题】:Alternative way to hold members in a data structure 【发布时间】:2011-07-28 13:43:30 【问题描述】:

我需要记住 n 个实例的值对。我知道一种解决方案,即创建一个单独的类或结构,声明 2 个成员变量并将其放在列表或数组中。

但是在 C++/VC++ MFC 中还有其他有效的方法吗?

【问题讨论】:

这种方法有什么问题让您寻找替代方案(顺便说一句,您可以使用std::pair 【参考方案1】:

您可以使用std::pair<X,Y>std::make_pair(T1, T2) 创建一对。然后,您可以将这些对存储在您选择的数据结构中,因为您想修改

std::vector<std::pair<X,Y> > or std::set<std::pair<X,Y> >

【讨论】:

【参考方案2】:

如果问题中提到的表示整数值,我认为您可以使用CPointCSize中的CArray,但会牺牲代码可读性。

示例代码:

CArray<CPoint, CPoint> Array;
Array.Add(CPoint( 2, 3 ));
Array.Add(CPoint( 2, 4 ));

【讨论】:

【参考方案3】:

您可以使用tr1::tuple。

另外,在我的article here 中进行了描述。

【讨论】:

注: std::tuple 是 C++0x 中的全变量类型。 是的,但是当前的 VC 实现不支持可变参数模板。它使用嵌套的标题包含。通过 标头进入 std 命名空间,但实际上只在 tr1 中。 哦是的you're right哎呀【参考方案4】:

还有很多其他方法可以做到这一点,但这可能是最有效的方法之一。我能想到几种非常低效的方法。

【讨论】:

【参考方案5】:

你可以做的比查看Boost::Tuple<>更糟糕

元组(或 n 元组)是固定大小的元素集合。对, 三元组、四元组等是元组。在编程语言中,一个 tuple 是一个包含其他对象作为元素的数据对象。这些 元素对象可能有不同的类型。

元组在许多情况下都很方便。例如,元组使 很容易定义返回多个值的函数。

【讨论】:

【参考方案6】:

如果其中一个值是另一个值的键,您可以使用Dictionary 或其他映射类型的数据结构。

http://msdn.microsoft.com/en-us/library/xfhwa508.aspx(仅限.NET)

正如 MSalters 所指出的,MFC 也有自己的地图类型,CMap

如果您想在非 CLI 或 MFC 代码中使用类似的东西,请查看 std::map

【讨论】:

“C++”的哪一部分你不明白? @Martinho:您似乎错过了 LLL 暗示他正在使用 VC++ 的问题部分。 VC++ 是编译器或 IDE。如果问题是关于 C++/CLI,它不会在任何地方显示。 不,VC++ 编译器在编译 C++ 时不支持 .NET 类。 也不是我的反对意见,但 MFC 是您无法使用 .Net 的赠品。再说一次,MFC 确实CMap&lt;Key, Key&amp;, Value, Value&amp;&gt;(是的,那些引用是多余的,我同意有点奇怪)。

以上是关于将成员保存在数据结构中的另一种方法的主要内容,如果未能解决你的问题,请参考以下文章

在>=win10 17134枚举驱动的另一种方法

如何将一种泛型类型的结构复制到 TypeScript 中的另一种泛型?

在 ES6 类中实现数据隐私的另一种方法 [重复]

保存另一种语言数据

CodeIgniter 查询:如何将列值移动到同一行中的另一列并将当前时间保存在原始列中?

NodeJS中模块成员导出的另一种方式![module.exports]