c++ - 从 set<A*,Comparator> 获取 A 成员到 list<A>

标签 c++ list stl set

我有一套 A*指向堆上分配的对象的指针使用比较器排序(使用 operator() 中的 struct PtrComparator ),如下所示: set<A*,PtrComparator>

比较器根据A.m_timeStamp.timeStamp对其进行排序这是 basic_string . 但是我被迫提取一个list<A>使用由两个字符串参数描述的范围并将其返回给调用者。 所以我想我需要使用这两个参数来获取一系列迭代器?然后填写列表?

我该怎么做?

恐怕任何临时A当函数终止时,我创建的对象将被销毁,所以我如何将它存储在 list<A> 中? ?我不是被迫再次使用堆吗?

我不允许更改 list<A>list<A*>但我可以修改我的实现以适应 list<A>返回类型,但是当我试图在构造函数中的某处填充集合时,如何解决临时对象的问题。我可以用 set<A> 来实现吗? ?

struct PtrComparator;
class A
 {
   public:
                   A           ( const CTimeStamp & timeStamp,
                                 const string     & from,
                                   const ABody  & body,
                                 const Attach    * attach );
    A(const A&);
    ~A();
    const string     & From      ( void ) const;
    const ABody  & Body         ( void ) const;
    const CTimeStamp & TimeStamp  ( void ) const;
    const Attach* Attachment     ( void ) const;
    // will do the above getters later
    friend ostream & operator <<   ( ostream & os, const A & x );
    //friend bool operator< (const A&,const A&);
    friend struct PtrComparator;

   private:
    CTimeStamp m_timeStamp;
    string m_from;
    ABody m_body;
    const Attach * m_ptr_to_attach;
 };
    //normal constructor
 A::A(const CTimeStamp & timeStamp,const string & from,
      const ABody & body,const Attach * attach)
 :m_timeStamp(timeStamp),m_from(from),m_body(body),m_ptr_to_attach(attach)//,count_(0)
 {
    attach->AddRef();
 }
 //copy constructor
{
//similar to normal constructor
}

//destructor
A::~A()
{
    m_ptr_to_attach->Release();
}
 ostream & operator<< (ostream & os,const A & x) 
 {
     os << "body:" <<x.m_body <<" , from: " << x.m_from << " , attachment: " 
     <<  (x.m_ptr_to_attach) <<" , timestamp:" << x.m_timeStamp;

     return os;
 }

struct PtrComparator{
 bool operator()(const A* first,const A* second)
 {
     return first->m_timeStamp.timestamp < second->m_timeStamp.timestamp;
 }
};
class Box_of_A
 {
   public:
                   Box_of_A ();
                   ~Box_of_A();
    bool           Delivery       ( const A      & a );
    bool           NewFolder     ( const string     &  folderName );

    **list<A>    ListOfA      ( const string     & folderName,
                               const CTimeStamp & from,
                               const CTimeStamp & to );**
    typedef map<string,set<A*,PtrComparator> * >::const_iterator  folders_c_it;
    typedef map<string,set<A*,PtrComparator> * >::iterator  folders_it;
   private:

    map<string,set<A*,PtrComparator> * > folders;
 };

bool Box_of_A::Delivery(const A & a)
{
    folders_it it = folders.find("index");
    if(it == folders.end())return false;
    set<A*,PtrComparator>* & folder = it->second;
    A * newA = new A(a);
    folder->insert(newA);

    return true;
}

我错过了这个功能

list<A>    ListOfA      ( const string     & folderName,
                            const CTimeStamp & from,
                             const CTimeStamp & to );

CTimeStamp 有一个成员 basic_string timeStamp .

有人能告诉我摆脱困境的方法吗?

最佳答案

改变这个:

map<string,set<A*,PtrComparator> * > folders

为此:

map<string,set<A,Comparator> > folders

神奇的是,你的生活会变得更好。

关于c++ - 从 set<A*,Comparator> 获取 A 成员到 list<A>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23317371/

相关文章:

c++ - 在 "wrapper"类中使用原子类型

python - 另一种计算列表中出现次数的方法

c# - 如何以最有效的方式返回 List<int> 中两个最大值的总和? C#

c++ - 使用 lambda 表达式作为 std::set 的比较,当它在 vector 中时

c++ - 比较 vector 中的元素并返回对象的最佳方法

c++ - GCC 如何连接多个 C++ std::string 变量?

c++ - 带有 body 的纯虚函数的用例?

c++ - "Undefined symbols for Architecture x86_64 "没有使用模板,可能有语法错误

python - 如何过滤列表中出现在同一列表python中较长元素中的字符串元素?

C++ STL 映射类型定义错误