时间效率在c ++中对结构进行排序

时间:2017-11-17 09:13:55

标签: c++ sorting

我有一个结构

 struct abc
       {
        int p;
        int q;
       }

和一个文件,它给出p和q的值以及要完成的操作(插入,删除或修改),然后相应地需要以排序的方式维护这些值(按p分类)。登记/> 顺序是

1.Read the line from file
2.If insert, insert in a sorted manner<br>   
  If modify,delete; first remove the element and then sort<br>
3.Repeat step 1<br><br>

我已经用链接列表实现了这个,但是还有其他更省时的方法吗?
我想到了一个数组(使用memcpy来简化操作),设置和向量,但实现方式似乎有点困难,因为所有操作都必须完成。
如果我能得到代码的算法或快照,将会有所帮助

2 个答案:

答案 0 :(得分:3)

您可以使用结构数组来获取输入,然后根据比较函数使用内置排序。

bool compare(struct abc c1,struct abc c2)
{ 
 return c1.p < c2.p;
}


//main
abc arr[n];
for(int i=0;i<n;i++)
{
 cin>>arr[i].p>>arr[i].q;
}
//O(n lg n)
sort(arr,arr+n,compare);

答案 1 :(得分:1)

您不需要实施许多操作。

定义您的订购关系:

bool operator<(const abc& lhs, const abc& rhs) { return lhs.p < rhs.p; }    

阅读数据:

std::vector<abc> data;
abc x;
while (whatever >> x.p >> x.q)
{
    data.push_back(x);
}

对数据进行排序:

std::sort(data.begin(), data.end());

在维持订单的同时插入

abc y = whatever;
data.insert(std::lower_bound(data.begin(), data.end(), y), y);