【问题标题】:how to quickly find the element that I want in c++如何在 C++ 中快速找到我想要的元素
【发布时间】:2014-12-29 07:06:46
【问题描述】:

我有一张地图是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->price=0 改变时 那么它会

sort(vec.begin(),vec.end(),lineCompare());
sort(vec2.begin(),vec2.end(),lineCompare());

当元素改变时,向量必须排序。当元素无效时,我必须检查每个有效的元素。

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

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

【问题讨论】:

  • 如何找到你想要的向量,或者如何找到向量内的元素?可以重复吗?能详细点吗?
  • 抱歉,我已经编辑了我的问题。

标签: c++ dictionary stl


【解决方案1】:

据我了解,您想要检索包含您的 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,那么您可以使用line* 作为键(或line_id?)并将其所有者作为值来执行std::map

std::map<line*, std::vector<lineCon>>

【讨论】:

  • 谢谢,给我一些想法,但它不能解决如何快速找到向量元素的问题。矢量看起来像火车的座位。我想快速找到可以选址的座位。
  • @gougou: 你有lower_bound 元素被排序...但是你认为这个功能不符合你的要求。
  • 为什么不符合要求?
  • 我的意思是不仅仅是元素被排序了。
猜你喜欢
  • 1970-01-01
  • 2020-04-08
  • 2014-07-20
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 2016-09-25
  • 2020-03-15
相关资源
最近更新 更多