我正在努力做这个操作,我有一个向量,它的大小可能是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;
}
答案 0 :(得分:2)
如果您的问题是按升序排序tempID
,我会这样做:
vector<int> VectorReader::SortID(vector<int> tempID)
{
std::sort(tempID.begin(), tempID.end());
return tempID;
}
答案 1 :(得分:0)
看起来你想要做的是返回一个与输入相对应的向量,但每个元素都被一个数字替换,该数字是该元素在输入中出现的相对顺序。
也就是说,如果我们从输入中删除所有重复项,则每个元素的输出是无副本向量中该元素的索引。
这可能会起到作用:
#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;
}