将一系列数字映射到 CPP 中的值的简单方法
easy way to map a range of numbers to a value in cpp
有没有办法将一系列数字映射到 cpp 中的特定数字或值,如下所示:
1-10 : 15
10-20 : 05
范围将是连续的数字。 该值可以是任何随机数。 无法对范围进行算术计算来得出该值。 没有这种关系。我需要一个硬编码映射。
更新: 我熟悉地图。考虑像下面这样的地图。
{
{1,10}
{2,10}
{3,10}
...
{10,10}
{11,20}
{12,20}
...
{15,20}
{16,30}
{17,30}
{18,30}
}
我不是为每个数字执行此操作,而是想对范围执行此操作,因为对于连续数字的值是相同的,如下所示。
{
{1 to 10 ,10}
{11 to 15 ,20}
{16 to 18 ,30}
}
有什么办法可以做到这一点。
我知道一种方法是定义数组中的下限和上限,并将输入与它们进行比较。
{
{1,10,10},
{11,15,20},
{15,18,30}
}
它被称为Interval Map
。C++中没有内置的数据结构,但您可以创建自己的或使用现有实现。
我需要一个硬编码的映射。
如果可以使用 boost,则可以执行以下操作:
std::unordered_map<std::pair<int, int>, int, boost::hash<std::pair<int, int>>> myMap = {
{ { 1, 10} , 15 },
{ { 10, 20} , 5 },
};
否则,您必须为std::pair
提供哈希
// A trivial hash function used to hash a pair
struct hash_pair {
template <class T1, class T2>
size_t operator()(const pair<T1, T2>& p) const
{
auto hash1 = hash<T1>{}(p.first);
auto hash2 = hash<T2>{}(p.second);
return hash1 ^ hash2;
}
};
std::unordered_map<std::pair<int, int>, int, hash_pair> myMap = {
{ { 1, 10} , 15 },
{ { 10, 20} , 5 },
};
Demo Here
相关文章:
- 一种在C++中读取TXT配置文件的简单方法
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?
- 将时间戳打印到流的最简单方法
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- C++ 将静态方法转换为简单方法
- 将一系列数字映射到 CPP 中的值的简单方法
- 引用基类模板的成员变量的简单方法
- 学习数据结构和算法的简单方法
- boost::variant - 对变体应用算术的最简单方法
- 创建可以遍历 std::map 值的通用模板迭代器的最简单方法是什么?
- 在C++中将算术类型转换为 std::array 的最简单方法<uint8_t>
- 使用新运算符C++创建多维数组的简单方法
- C++-将ASCII字符数组中可能的数值转换为字符的最简单方法
- OpenSSL模块化最大数据类型大小的简单方法
- 获取当前按键的简单方法
- 多个 if-else 测试的更简单方法
- 为具有多个参数的函数创建 SWIG 类型图的更简单方法?