将成员保存在数据结构中的另一种方法
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】:如果问题中提到的对值表示整数值,我认为您可以使用CPoint
或CSize
中的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 实现不支持可变参数模板。它使用嵌套的标题包含。通过 还有很多其他方法可以做到这一点,但这可能是最有效的方法之一。我能想到几种非常低效的方法。
【讨论】:
【参考方案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<Key, Key&, Value, Value&>
(是的,那些引用是多余的,我同意有点奇怪)。以上是关于将成员保存在数据结构中的另一种方法的主要内容,如果未能解决你的问题,请参考以下文章
如何将一种泛型类型的结构复制到 TypeScript 中的另一种泛型?