我的地图是map<int,vector>
。当矢量元素被改变时,矢量必须按照某种规则排序。矢量可能有很多元素。我的问题是如何快速找到我想要的元素。
元素可以由另一个向量共享。
class line
{
public:
int line_id;
string name;
int capacity;
int price;
int cur_connected;
};
class no
{
public:
int num_id;
string name;
string country_name;
int country_id;
};
class lineCon
{
public:
line* l;
int priority;
};
class lineCompare
{
public:
lineCompare(){};
~lineCompare(){};
bool operator()(const lineCon &left,const lineCon &right)
{
if (left.priority < right.priority) //storage first
return true;
else if (left.priority == right.priority)
{
if (left.l->price < right.l->price)
return true;
else
return false;
}
else
return false;
}
};
line *l1 = new line();
line *l2 = new line();
line *l3 = new line();
lineCon lc1= new lineCon();
lineCon lc2= new lineCon();
lineCon lc3= new lineCon();
lineCon lc4= new lineCon();
lc1->l=l1;
lc1->priority=2;
lc2->l=l2;
lc2->priority=3;
lc3->l=l3;
lc3->priority=2;
lc4->l=l3;
lc4->priority=2;
vectory<lineCon> vec;
vec.push_back(lc1);
vec.push_back(lc2);
vec.push_back(lc3);
sort(vec.begin(),vec.end(),lineCompare());
vectory<lineCon> vec2;
vec2.push_back(lc4);
sort(vec2.begin(),vec2.end(),lineCompare());
map<int,vector<lineCon> > h;
h.insert(make_pair(2,vec))
h.insert(make_pair(3,vec2))
当l3-&gt; price = 0时被更改 那么它会
sort(vec.begin(),vec.end(),lineCompare());
sort(vec2.begin(),vec2.end(),lineCompare());
当元素被更改时,vector必须被排序。当元素无效时,我必须检查每个有效的元素。
向量看起来像火车的座位。我想快速找到可以选址的座位。
你最好的办法是什么。
答案 0 :(得分:0)
据我了解,您想要检索包含line
。
如果您可以更改line
以对其容器进行某种反向引用,那么您将立即获得该信息。在每个父项中插入行时,必须填写这些引用。
class line
{
public:
int line_id;
string name;
int capacity;
int price;
int cur_connected;
std::vector<lineCon> owners; // choose the more relevant between
// direct owner `lineCon`,
// final container vector<lineCon>
// or key of the map
};
如果您无法修改line
,那么您可以使用std::map
作为密钥(或line*
?)并将其所有者作为值来进行line_id
。
std::map<line*, std::vector<lineCon>>