如何在c ++中快速找到我想要的元素

时间:2014-12-29 07:06:46

标签: c++ dictionary stl

我的地图是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必须被排序。当元素无效时,我必须检查每个有效的元素。

向量看起来像火车的座位。我想快速找到可以选址的座位。

你最好的办法是什么。

1 个答案:

答案 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>>