如何在 c++ 中存储具有值的四个参数的元组
How to store a tuple of four parameters with a value in c++
如何在 c++ 中存储四个带有值的参数并能够调用它。
例如,我有参数u,k,i,childEdge和一个名为val的值。
我想像这样存储它们:(5,4,6,1( = 42。
并且能够像这样访问它们:int answer = find(5,4,6,1(,所以答案将是 42
我使用的是 4D 数组,但对于大型输入,它在 c++ 中似乎不能很好地工作
所以你想要的是从四个参数到一个值的映射。您可以根据需要使用std::map
或std::unordered_map
1.主要问题是如何表达四值键。以下是一些选项:
using MyKey = std::tuple<int, int, int, int>;
using MyKey = std::array<int, 4>;
struct Parameters { int u, k, i, childEdge; };
using MyKey = Parameters;
然后,您的数据结构将是std::map<MyKey, int>
或std::unordered_map<MyKey, int>
。
我更喜欢struct
选项,因为它是最清楚的。但是,您必须为std::map
或std::hash
提供operator<
,并为std::unordered_map
提供operator==
才能使用它(或等效地,使用此类函子作为映射的附加模板参数(。研究"自定义密钥 std::map"或类似内容以了解更多信息,请参阅此处或此处。
1还有其他选项,例如排序std::vector
,根据您的使用模式,它们的性能可能会也可能不会优于关联容器。但这在这里跑题了。
你可以使用std::map。我相信你可以使用map.find来获得你的价值。
使用std::array
作为键。您必须提供自己的哈希函数:
#include <array>
#include <boost/functional/hash.hpp>
#include <functional>
#include <iostream>
#include <unordered_map>
namespace std {
template <typename T, size_t sz>
struct hash<array<T, sz>> {
[[nodiscard]] size_t operator()(array<T, sz> const& arr) const noexcept {
return ::boost::hash_range(arr.cbegin(), arr.cend());
}
};
} // namespace std
int main() {
std::unordered_map<std::array<int, 4>, int> m;
m[{5, 4, 6, 1}] = 42;
m[{1, 2, 3, 4}] = 1234;
m[{2, 2, 2, 2}] = 2222;
std::cout << m[{5, 4, 6, 1}] << 'n';
}
您可以使用地图,在键 5、4、6 和 1 中,值将为 42。 然后搜索函数接收参数并在地图中搜索它们。
元组和整数的映射怎么样,例如std:map<std::tuple<int, int, int, int>&, int>
.这样,您将能够直接将元组用作键,因为它被存储为参考。
但是,我建议使用一种与使用tuple
完全不同的方法。为什么不只为所有 5 个项目创建一个类。然后,如果您希望更好地访问这些数据,请list
这些对象或std::unordered_map
。
如何用值存储四个参数
编写一个类:
struct Key {
int u, k, i, childEdge;
};
类型Key
的对象会将四个参数存储在一个参数中。
并且能够像这样访问它们:int 答案 = find(5,4,6,1 (
通过将值存储在关联容器中,可以将值与另一个值相关联。具体来说,要将一个值映射到另一个值,可以使用 (n 无序( 映射。标准库中有容器。您可以使用上述类作为映射的键,以有效地实现所描述的操作。
- 在C++中,如何通过几种类型从元组中选择多个元素
- 将fold表达式与std::一起用于两个元组
- c++:交换向量中所有元组的第一个和第二个元素
- 如何在 c++ 中存储具有值的四个参数的元组
- C++ 函数,用于查找数组中四个最小最大元素的总和不起作用
- 返回两个向量 – 使用引用还是元组?
- 使用领带从元组中分配 2 个 lambda
- 使用函数的元组返回多个值的问题
- 如何实现四个 i8 元素组的高效_mm256_madd_epi8点积
- 如何使用返回第 n 个元素的方法创建元组
- 是否有可能通过溢出 C 中的第一个元素来写入数组第二个元素
- 具有多个空成员的 std::元组上的比较无法在 GCC 上编译
- 通过移动从两个向量创建元组向量
- 如何将多个可变参数模板元组类组合成一个类?
- 如何检查两个元组的所有成员是否不同
- C 通过随机选择其元素从两个元组制成元组
- 如何将两个元组作为C 的参数发送
- 在 C++11 中加入两个元组
- 如何创建一个在 C++11 (STL) 中压缩两个元组的函数
- 如何绑定两个元组