Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 离散域到连续域的映射_C++ - Fatal编程技术网

C++ 离散域到连续域的映射

C++ 离散域到连续域的映射,c++,C++,我把一个连续域映射成一个离散域。这样,我就有了一个由随机值组成的向量v1。该向量的每个索引可以表示特定值(例如,索引0表示id999)。要将v1转换为v2,首先我将v1复制到v1.1并按升序排序。然后,对于v1.1中的每个元素,我在v1中搜索其位置,并将其索引包括在v2中,如下所示 index 1, 1, 2, 2, 3 v1 = {0.1, 0.22, 0.99, 0.22, 0.55} v1.1 = {0.1, 0.22, 0.22, 0.55, 0.99

我把一个连续域映射成一个离散域。这样,我就有了一个由随机值组成的向量v1。该向量的每个索引可以表示特定值(例如,索引0表示
id
999)。要将
v1
转换为
v2
,首先我将
v1
复制到
v1.1
并按升序排序。然后,对于
v1.1
中的每个元素,我在
v1
中搜索其位置,并将其索引包括在
v2
中,如下所示

index     1,    1,    2,    2,    3
v1   = {0.1, 0.22, 0.99, 0.22, 0.55}
v1.1 = {0.1, 0.22, 0.22, 0.55, 0.99}
v2   = {  1,    1,    2,    3,    2}

既然在
v1
中可能存在重复值,那么什么是有效的方法

大致如下:

st::vector<int> v2(v1.size());
std::iota(v2.begin(), v2.end(), 0);
std::sort(v2.begin(), v2.end(),
  [&](int pos1, int pos2) {
    return std::tie(v1[pos1], pos1) < std::tie(v1[pos2], pos2);
  }
);
std::transform(v2.begin(), v2.end(), v2.begin(),
  [&](int pos) { return index[pos]; }
);
st::vector v2(v1.size());
std::iota(v2.begin(),v2.end(),0);
排序(v2.begin(),v2.end(),
[&](intpos1,intpos2){
返回std::tie(v1[pos1],pos1)

该过程似乎涉及排序
v1
。当两个
v1
元素相等,但它们对应的
索引值不同时,会发生什么情况?在
v2
中应该显示什么?例如,
v1={1.0,1.0};索引={2,1}
-应该
v2
{1,2}
,或者
{2,1}
,或者两者中的任何一个,而哪一个都不重要?阅读注释。我要求澄清在这种情况下,输出应该是什么。如所述的问题出现在“指定”下。@IgorTandetnik如果v1中出现相等的值,每个值表示不同的索引,则每个值都应映射到v2中对应的索引。由于
v1.1
是从左到右映射的,因此一种简单的方法是映射每个值并将其从向量中删除。但这似乎是无济于事的。是的,但顺序是什么?我在评论中给出了一个具体的例子——这个例子的输出应该是什么?@IgorTandetnik我正在使用lower_bound来查找值,因此当我在
v1
中搜索值时,它给了我从左到右的值的第一个外观。为了回答您的问题,分别为2和1的1.0和1.0将首先将2放入v2,然后将1放入v2。应考虑重复的值。问题是创建一种考虑重复值的转换方法。好的,考虑到不会出现重复值,可以创建向量。但是,我将以这种方式在向量中执行操作,有时,重复值将出现在<代码> V1 < /代码>中。我的代码也考虑重复值。试试看,你自己看看。