从集合<A*,比较器>中获取A成员以列出<A>
get A members from set<A*,Comparator> to list<A>
我有一组A*
指针,指向用比较器(使用struct PtrComparator
中的operator()
)排序的堆上分配的对象,如下所示:set<A*,PtrComparator>
比较器根据作为basic_string
的A.m_timeStamp.timeStamp
对其进行排序。然而,我被迫使用两个字符串参数描述的范围提取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
神奇地,你的生活会变得更好。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中