我有一个结构
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来简化操作),设置和向量,但实现方式似乎有点困难,因为所有操作都必须完成。
如果我能得到代码的算法或快照,将会有所帮助
答案 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);