我的程序应该从文本文件中读取数字数据(成对),删除重复项,然后在转移到其他内容之前告诉我矢量的大小。我测试了下面的代码并且它适用于具有大约10-20行数据的文件,但是当我在更大的数据集(超过100,000行数值数据)上尝试它时,当我尝试大小时没有输出( );矢量。不确定是什么问题。
while( getline( fs1, instrng ) ) {
istringstream s1(instrng);
int a, b;
s1 >> a >> b;
pair<int,int> pair1 = make_pair(a,b);
vec1.push_back( pair1 );
sort( vec1.begin(), myvec1.end() );
myvec.erase(unique(myvec.begin(),myvec.end()), myvec.end());
答案 0 :(得分:1)
在您的上下文中,std::sort()
和std::unique()
的使用正在发挥作用。问题是性能问题。你需要做两件事之一:
std::sort()
,std::unique()
和std::vector<...>::erase()
的使用移出了循环。换句话说:您设法为O(n * n * log n)
创建了一个O(n * log n)
实现,其中n
是元素的数量。
std::istringstream
作为创建和/或设置这些流也会增加不必要的成本。不可否认,这个成本远远低于每个元素的排序。