存储同一类型的两个相关值的惯用方法

Idiomatic way to store two related values of the same type

本文关键字:方法 两个 类型 存储      更新时间:2023-10-16

这将是一个非常简单的问题:在C++03中,我将使用std::pair存储两个相同类型的值。然而,当我希望我的两个值都是同一类型时,必须重复两次类型在某种程度上是一种麻烦。现在,有了C++11,我们就有了std::array。这样写会更习惯吗:

std::array<int, 2> foo;

而不是:

std::pair<int, int> foo;

当目标是存储两个相关的数据(例如,一个函数求解二次方程的结果)时?

我不认为在标准库或Boost中有任何适合这种情况的数据类型

pair<T, T>绝对错误:
如果make_pair(1, 2) == make_pair(2, 1)表示多项式的根,则CCD_4应为true

出于同样的原因,数组/向量也不起作用,除非您更改比较行为。

所以我想说,制作一个bag<T, N>数据类型,它代表一个固定大小的multiset<T>,有点像array<T, N>代表固定大小的CCD 8。

由于大小很小,您可以通过蛮力(比较、相等性检查等)来完成所有操作。

我仍然会使用pair来指示一个值与另一个值相关。数组并没有向我传达这个意思。

std::pair在两个项目之间有关系并且想要描述这种关系的情况下是有意义的。

然而,在你的情况下,我会使用std::array,因为二次方程的两个解彼此之间没有任何关系(我可以看到解和等式之间的关系,但不能看到两个解之间的关系)。

取决于较大的上下文。

在你提到的例子中,我会使用std::array,因为这样你也可以在等式的次数上模板化函数:

template <int N>
std::array<double, N> solveEquation(const Polynomial<N>& poly);

我认为std::pair<>的相应C++11抽象是std::tuple<>,因为对只是元组的特例。

std::pair<>不一定具有相同的类型,BTW.

正是出于惯用的原因,我建议使用pair a表示两个值都是相关的,而array与值列表更相关(在我看来)。

例如,在您建议的用法中,两个值之间的关系将是二次函数本身。