gpt4 book ai didi

c++ - vector 中的元素编号

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:26:58 24 4
gpt4 key购买 nike

我有一个整数 vector 。例如: 26 58 32 47 。我需要按顺序用它们的编号替换它们。在这种情况下,它将是: 4 1 3 2 。我试过这段代码:

int n = 1;
vector <int> vietos;
for (vector <int>::iterator i = vieta.begin(); i != vieta.end(); i++) {
for (vector <int>::iterator j = vieta.begin(); j != vieta.end(); j++) {
if (*i > *j)
n++;
}
vietos.push_back(n);
cout << n << " ";
n = 1;
}

有数字 23 25 38 28 26 28 (注意:在这种情况下,我以相反的顺序对它们进行编号!)我得到: 1 2 6 4 3 4 这是很好,除了两个数字相等。

也许有一些方法可以使用 STL 算法对 vector 中的元素进行编号?

最佳答案

在我看来,最简单的方法是使用 std::reference_wrapper。代码会看起来简单明了。

这是演示该方法的程序。

尽情享受吧!:)

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>


int main()
{
std::vector<int> v = { 23, 25, 38, 28, 26, 28 };

for ( int x : v ) std::cout << x << ' ';
std::cout << std::endl;

// Introducing a local block scope that the auxiliary vector would be automatically deleted
{
std::vector<std::reference_wrapper<int>> vr( v.begin(), v.end() );

std::stable_sort( vr.begin(), vr.end() );

for ( std::vector<std::reference_wrapper<int>>::size_type i = 0;
i < vr.size();
i++ )
{
vr[i].get() = i + 1;
}

}

for ( int x : v ) std::cout << x << ' ';
std::cout << std::endl;

return 0;
}

输出是

23 25 38 28 26 28 
1 2 6 4 3 5

如果你需要得到相反的顺序,你只需要添加到代码功能对象中

std::greater<std::reference_wrapper<int>>()

std::stable_sort 的调用中

例如

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>


int main()
{
std::vector<int> v = { 23, 25, 38, 28, 26, 28 };

for ( int x : v ) std::cout << x << ' ';
std::cout << std::endl;

// Introducing a local block scope that the auxiliary vector would be automatically deleted
{
std::vector<std::reference_wrapper<int>> vr( v.begin(), v.end() );

std::stable_sort( vr.begin(), vr.end(),
std::greater<std::reference_wrapper<int>>() );

for ( std::vector<std::reference_wrapper<int>>::size_type i = 0;
i < vr.size();
i++ )
{
vr[i].get() = i + 1;
}

}

for ( int x : v ) std::cout << x << ' ';
std::cout << std::endl;

return 0;
}

输出是

23 25 38 28 26 28 
6 5 1 2 4 3

难道这不是最好的解决方案吗? :)

编辑:也许对函数对象使用 std::stable_sort 是没有意义的。以相反的顺序使用 for 循环设置数字就足够了。作为

        for ( std::vector<std::reference_wrapper<int>>::size_type i = 0;
i < vr.size();
i++ )
{
vr[vr.size() + i - 1].get() = i + 1;
}

关于c++ - vector 中的元素编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23843540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com