Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何快速查找C++中想要的元素_C++_Dictionary_Stl - Fatal编程技术网

如何快速查找C++中想要的元素

如何快速查找C++中想要的元素,c++,dictionary,stl,C++,Dictionary,Stl,我有一张地图,那就是地图。当向量的元素发生变化时,向量必须按照某种规则进行排序。而且向量可能有很多元素。我的问题是如何快速找到我想要的元素 该元素可以由另一个向量共享 class line { public: int line_id; string name; int capacity; int price; int cur_connected; }; class no { public: int num_id; string name; string c

我有一张地图,那就是地图。当向量的元素发生变化时,向量必须按照某种规则进行排序。而且向量可能有很多元素。我的问题是如何快速找到我想要的元素

该元素可以由另一个向量共享

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))
当元素被改变时,向量必须被排序。当元素无效时,我必须检查每个有效的元素

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


您最好的处理方法是什么。

据我所知,您希望检索包含行的向量

如果您可以将行更改为对其容器具有某种反向引用,那么您将立即获得该信息。在每个父对象中插入行时,必须填充这些引用

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 
};

如何找到你想要的向量,或者如何找到向量中的元素?会有重复吗?你能详细解释一下吗?对不起,我已经编辑了我的问题。谢谢,给我一些想法,但它不能解决如何快速找到向量元素的问题。向量看起来像火车的座位。我想快速找到哪个座位可以被定位。@gougou:当元素被排序时,你有了它的下界。。。但是你认为这个函数不符合你的要求。为什么它不符合要求?我的意思是不仅仅是元素被排序了。
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 
};
std::map<line*, std::vector<lineCon>>