Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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++ 使用stable_sort()对双精度整数进行排序_C++_Sorting - Fatal编程技术网

C++ 使用stable_sort()对双精度整数进行排序

C++ 使用stable_sort()对双精度整数进行排序,c++,sorting,C++,Sorting,我需要对大量整数进行排序。这里需要注意的是,列表中的每个条目都有许多其他相关元素,这些元素在排序时需要跟随int。通过将排序改为双精度排序而不是整数,我解决了这个问题。在对每个数字进行排序之前,我用一个小数部分对其进行了标记,表示该值在排序之前的原始位置,从而允许我引用它的关联数据,并允许我使用所有关联元素高效地重建排序列表 我的问题是,我想使用函数stable_sort()通过int对双值进行排序 我指的是这个网页: 然而,由于我是一名新程序员,我不太明白他们是如何设法让sort by INT

我需要对大量整数进行排序。这里需要注意的是,列表中的每个条目都有许多其他相关元素,这些元素在排序时需要跟随int。通过将排序改为双精度排序而不是整数,我解决了这个问题。在对每个数字进行排序之前,我用一个小数部分对其进行了标记,表示该值在排序之前的原始位置,从而允许我引用它的关联数据,并允许我使用所有关联元素高效地重建排序列表

我的问题是,我想使用函数stable_sort()通过int对双值进行排序

我指的是这个网页:

然而,由于我是一名新程序员,我不太明白他们是如何设法让sort by INT工作的。我到底应该在第三个参数中加入什么才能使函数工作呢?(我知道我可以复制粘贴它,让它工作,但我也想学习和理解这一点)

谢谢

-法肯

编辑:请注意,我是一个没有受过正式编程培训的新程序员。我边学边做,所以请尽量让你的解释简单和基本


简而言之,请把我当作以前从未见过的C++代码对待。

你需要通过比较函数。大概是这样的:

bool intCompare(double first, double second)
{
    return static_cast<int>(first) < static_cast<int>(second);
}

int  main()
{

    std::vector<double> v;
    v.push_back(1.4);
    v.push_back(1.3);   
    v.push_back(2.1);
    v.push_back(1.5);

    std::stable_sort(v.begin(), v.end(), intCompare);



    return 0;
}
bool intCompare(双首双秒)
{
返回静态施法(第一次)<静态施法(第二次);
}
int main()
{
std::向量v;
v、 推回(1.4);
v、 推回(1.3);
v、 推回(2.1);
v、 推回(1.5);
std::stable_sort(v.begin()、v.end()、intCompare);
返回0;
}

在排序算法中,使用比较函数比较传递的值。如果您有一个更复杂的数据结构,并且希望根据数据结构的特定属性进行排序,那么您可以使用此用户定义的函数来比较值。

我相信您所说的是此函数:

bool compare_as_ints (double i,double j)
{
  return (int(i)<int(j));
}
函数
compare\u as\u ints
是一个正常函数,但它作为函数指针传递给
stable\u sort
。i、 例如,正在传递函数的地址,该地址将由
stable\u sort
内部用于比较值


如果你对此不清楚,请看这个。

既然你说你不熟悉向量(不过你真的应该尽快学习STL容器),我想你是在玩数组。大致如下:

int a[] = { 3, 1, 2 };
std::stable_sort(&a[0], &a[3]);
stable\u sort
的第三个可选参数
f
是一个函数对象,也就是说,任何可以像函数一样调用的对象,只要在它后面加上括号-
f(a,b)
。函数(或者说是指向函数的指针)是函数对象;其他类型的类包括重载的
操作符()
,但出于您的目的,普通函数可能就可以了

现在,您有了要排序的带有
int
字段的数据类型,以及一些附加数据:

struct foo {
  int n;
  // data
  ...
};

foo a[] = { ... };

要对这个元素(或者任何东西)进行排序,
stable\u sort
需要有某种方法来比较任意两个元素,看看哪个元素更大。默认情况下,它只是使用操作符
,在比较函数中添加一个额外的整数字段来表示原始位置和dela不是更好吗?关联数据的具体内容是什么?几乎可以肯定,这可以做得更好。告诉我们你到底在做什么。@sharptooth:我不太明白你想说什么。早些时候,我一直在尝试编写自己的合并排序算法,该算法使用附加的第二个列表对列表进行排序,以跟踪原始位置。然后我发现了函数stable_sort()。。。如果还有其他标准函数可以这样做,请告诉我。@GMan:嗯……这个函数实际上是以1D列表的形式对2D数组进行排序。还有许多其他值(在单独的数组中)与特定的网格位置关联(尽管它们不需要排序)。我需要保留xy位置以及该位置的其他变量。基本上,我只需要存储XY数据,然后可以从那里重建所有的东西。如果你学习C++中的数据结构,你就会知道你可以用一个类似于<代码> MAP>代码>来把坐标和数据联系起来。嗯……向量是什么?推回?对不起,这个解释对我来说太高级了。如果你不知道向量是什么,你可能还没有准备好尝试你正在做的事情。买一本好书,确保你学好这门语言@格曼:嗯,我边走边学。老实说,我从这个开始就被彻底抛弃了。仔细研究代码,我发现我不需要向量来真正使函数工作,只需要简单的堆数组就可以了。作为一个初学者,你应该小心地做出这些假设,因为你不知道这是否是真的。@GMan:如果是这样,在这种情况下,它不会起作用,请启发我。啊,谢谢你,我想我现在明白了。这意味着我还可以控制函数如何对列表排序。这意味着如果我使用<作为比较器,我会得到一个从低到高的值,如果我使用>我会得到一个从高到低的值。
struct foo {
  int n;
  // data
  ...
};

foo a[] = { ... };
bool compare_foo_n(const foo& l, const foo& r) {
  return l.n < r.n;
}
std::stable_sort(&a[0], &a[3], compare_foo_n);