[英]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 },
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.