C++ 将一系列数字映射到cpp中的值的简单方法
有没有办法将一系列数字映射到cpp中的特定数字或值,如下所示: 1-10:15 10-20:05 范围将是连续的数字。该值可以是任意随机数。无法对范围进行算术计算以导出值。没有这种关系。我需要一个硬编码的映射 更新: 我熟悉地图。考虑下面的地图。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}
{
{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 },
};