首页 > 解决方案 > 将一系列数字映射到 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}
}

标签: c++enumsmapsunordered

解决方案


我需要一个硬编码的映射。

如果可以使用 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


推荐阅读