矢量排序和更改数据
vector sorting and changing data
我在做这个操作时很吃力,我有一个向量,它的大小可能是200000
,它包含像(156,256,789,1,2,1,1,1,63,89,7,8,45,1,1,2,5,8,9,6,47,8,96,5,465,6,etc)
这样的数据。
我的问题是我喜欢以
的形式获取数据( 0,1,2,3,4,3,3,3,5,6,7,8,9,3,3,4,10,8,11,etc)
。
我需要快速有效地做这个手术。。给一些同样的建议。
我的代码是
vector<int>* VectorReader::SortID(vector<int>* tempID)
{
std::vector<int>::iterator new_sortit;
vector<int> newit_ID;
newit_ID.resize(tempID->size());
copy( tempID->begin(), tempID->end(), newit_ID.begin());
int i = 0;
for( new_sortit =tempID->begin(); new_sortit != tempID->end(), i < tempID->size(); new_sortit++ )
{
int min_ID = *min_element( tempID->begin(), tempID->end());
int max_ID = *max_element( tempID->begin(), tempID->end());
int search_NodeID = std::find ( tempID->begin(), tempID->end(), min_ID) - tempID->begin();
replace( newit_ID.begin()+search_NodeID, newit_ID.end(), min_ID, i );
max_ID++;
replace( tempID->begin(), tempID->end(), min_ID, max_ID );
i++;
}
copy( newit_ID.begin(), newit_ID.end(), tempID->begin( ));
return tempID;
}
如果你的问题是按升序对tempID
进行排序,我会这样做:
vector<int> VectorReader::SortID(vector<int> tempID)
{
std::sort(tempID.begin(), tempID.end());
return tempID;
}
看起来您想要做的是返回一个与输入相对应的向量,但每个元素都替换为一个数字,该数字是该元素在输入中出现的相对顺序
也就是说,如果我们从输入中删除了所有重复项,那么每个元素的输出就是该元素在无重复向量中的索引。
这可能会奏效:
#include <vector>
#include <map>
typedef std::vector<int> Ints;
typedef std::map<int, size_t> IndexTable;
Ints findIndices(const Ints& input)
{
size_t size = input.size();
IndexTable indices;
size_t index = 0;
for (size_t i = 0; i != size; ++i)
{
if (indices.find(input[i]) == indices.end())
{
indices[input[i]] = index;
++index;
}
}
Ints output(size);
for (size_t i = 0; i != size; ++i)
{
output[i] = indices[input[i]];
}
return output;
}
相关文章:
- 如何对点云数据进行排序
- 如何使用 QSortFilterProxyModel::sort 对 Qlist 中的数据进行排序
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- 使用选择排序对数组数据结构进行排序,但它不起作用
- 为什么我的代码没有对数组中第二个索引上的数据进行排序?
- 使用 QSortFilterProxyModel 对 Qml ListView 的数据进行排序
- 读取 C++ 中的 txt 数据,展开为行或列并排序
- C++ 从文件中获取数据时使用 strcpy 和 strcmp 按字母顺序对数组进行排序?
- 存储在 std::map/std::set 中,与在存储所有数据后对向量进行排序
- 尝试创建排序的动态列表(数据结构)
- 固定大小的容器,其中元素被排序,并可以为C 中的数据提供原始指针
- 排序算法,使用模板按内部数据对对象进行排序
- 对多个数据成员进行排序
- 递归定义数组中的数据对齐和排序
- 如何修复输出显示,以便显示正确排序的数据
- 为什么我的气泡排序不适用于双精度数据类型?
- 气泡排序不传递数据或不起作用
- 使用 stl::map 和 stl::unordered_map 对包含大量重复元素的数组数据进行排序
- 数据排序依据是哪一列,QTableWidget
- 寻找更好的数据排序方法