простой способ отобразить диапазон чисел на значение в cpp - PullRequest
1 голос
/ 14 января 2020

Есть ли способ сопоставить диапазон чисел определенному числу или значению в cpp, например:

1-10: 15

10-20: 05

диапазон будет состоять из последовательных чисел. значение может быть любым случайным числом. арифметическое c невозможно вычислить в диапазоне для получения значения. такого отношения нет. Мне нужно жестко закодированное отображение.

Обновление: я знаком с картами. рассмотрим карту, подобную приведенной ниже.

{
    {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}
}

Ответы [ 2 ]

1 голос
/ 14 января 2020

Мне нужно жестко закодированное отображение.

Если вы можете использовать повышение, вы можете сделать что-то вроде следующего:

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

};

В противном случае вам придется предоставить га sh для 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

1 голос
/ 14 января 2020

Это называется Interval Map. В C ++ нет встроенной структуры данных для этого, но вы можете создать свою собственную или использовать существующую реализацию.

...