C++ 将一系列数字映射到cpp中的值的简单方法

C++ 将一系列数字映射到cpp中的值的简单方法,c++,enums,maps,unordered,C++,Enums,Maps,Unordered,有没有办法将一系列数字映射到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}

有没有办法将一系列数字映射到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++中没有内置数据结构,但可以自己制作或使用现有的实现。 我需要一个硬编码的映射

如果可以使用boost,可以执行以下操作:

std::unordered_map<std::pair<int, int>, int, boost::hash<std::pair<int, int>>> myMap = {
    { { 1,  10} , 15 },
    { { 10, 20} , 5 },    

};

请为您的问题提供解决方案。我不清楚你想做什么。区间的大小总是10吗?请提供更多详细信息,并展示您自己的尝试(即使它不起作用)!请展示到目前为止您已经完成的工作,并解释您的程序究竟是如何无法工作或无法产生预期结果的。您必须首先展示您的工作,在向stackoverflow.com寻求帮助之前,这必须是一次真诚的真正尝试,以实现您的任务,而不是几行代码。有关更多信息,请参阅问题、获取并阅读。您所说的“映射范围”是什么意思?这个范围是什么类型的?您想在需要时动态生成此范围,还是将其与映射的数字一起存储?我认为您的问题是XY问题。问题是当您添加重叠范围时,它们不会合并。@Rinat OP不清楚是否要合并,因为他对原始问题陈述进行了编辑,顺便说一句,其中也没有谈到合并。这就像放一个硬编码的表进行查找一样简单。
// 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 },    

};