作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要一组 TVertex 对象来访问它们按不同参数(id 和流)的排序。在 O(1) 时间内找到第 k 个元素并在 o(log2(N)) 时间内更新它们的属性。
为此,我使用了 TComparatorF 和 TComparatorI 类。
它们都有指向 TVertex 的指针和运算符 > 和 <
TComparatorF比较流量
TComparatorI 比较id
TVertex() 将指向自身的指针指向比较器。然后将比较器放入一组比较器中。
但是当我更新 TVertex 对象的属性时,相对于它的比较器的位置不会改变。
有没有办法强制我的集合更新或存储多个排序的更好主意?
代码:
#include<stdio.h>
#include<set>
#include<stdlib.h>
using namespace std;
const int N=300000;
struct TVertex;
struct TComparatorF
{
TVertex *cmp;
bool operator >(const TComparatorF &other) const;
bool operator <(const TComparatorF &other) const;
};
struct TComparatorI
{
TVertex *cmp;
bool operator >(const TComparatorI &other) const;
bool operator <(const TComparatorI &other) const;
};
set <TComparatorF> flowset;
set <TComparatorI> idset;
struct TVertex
{
int flow,id;
TVertex();
};
bool TComparatorF::operator >(const TComparatorF &other) const
{
return !(*cmp).flow>(*(other.cmp)).flow;
}
bool TComparatorF::operator <(const TComparatorF &other) const
{
return !(*cmp).flow<(*(other.cmp)).flow;
}
bool TComparatorI::operator >(const TComparatorI &other) const
{
return !(*cmp).id>(*(other.cmp)).id;
}
bool TComparatorI::operator <(const TComparatorI &other) const
{
return !(*cmp).id<(*(other.cmp)).id;
}
TVertex::TVertex()
{
flow=0;
TComparatorF comp;
comp.cmp=this;
flowset.insert(comp);
TComparatorI comp2;
comp2.cmp=this;
idset.insert(comp2);
}
TVertex ver[N];
int main()
{
ver[0].flow=17;
ver[0].id=6;
ver[1].flow=100;
ver[1].id=5;
ver[2].flow=5798;
ver[2].id=40;
TComparatorF comp=*(flowset.begin());
TComparatorI comp2=*(idset.begin());
printf("%d %d\n",(*(comp.cmp)).flow,(*(comp2.cmp)).id);
system("PAUSE");
return 0;
}
我明白了
17 6
代替
5798 40
最佳答案
回答“是否有办法强制我的集合更新或存储多个排序的更好主意?”
容器不会根据其条目的更改自行更新,这就是设置条目和映射键保持不变的原因。您可以对手动完成更新(删除/插入)的集合进行包装,或者您可以使用提升 multi index containers已经有了这个(参见 modifiers )
关于c++ - 如何更新指针集 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19448058/
我是一名优秀的程序员,十分优秀!