C++ 设计下面提到的数据结构的最佳方法

C++ 设计下面提到的数据结构的最佳方法,c++,string,algorithm,data-structures,map,C++,String,Algorithm,Data Structures,Map,我有这门课 class event_t { public: event_t(String *_session_time, String *_event_type, String *_table_name, String *_num_of_events); ~event_t(); char *table_name; char *event_type; pthread_mutex_t lock; pthread_cond_t cond; int num_o

我有这门课

class event_t {

public:
  event_t(String *_session_time, String *_event_type, String *_table_name, String *_num_of_events);
  ~event_t();
   char *table_name;
   char *event_type;  
   pthread_mutex_t lock;
   pthread_cond_t cond;
   int num_of_events_threshold;
   double time_out; 
   int num_of_events_so_far; 
};
然后我有一个stl::map

std::map <char*, std::list<event_t*>, cmp_str > all_events;
std::映射所有事件;
我想为相同的表名和事件类型保留一个条目。每当出现新请求时,如果旧事件具有相同的表名和事件类型,并且存在于std::list中,我希望删除它。但是当我删除这个旧的事件对象时,映射的键(恰巧是相同的char*table_名称)也会被删除

我的映射类似于:

map[event_t->table_name] = stl::list<event_t>
map[event\u t->table\u name]=stl::list

因此不要使用
char*
作为键(或者为此,数据成员
event\u type
table\u name
)。使用
std::string
我必须使用char*,因为所有部分都是使用自定义字符串类编写的,可以转换为c样式的字符串。我认为将其转换为std::string并使用将是一种过分的做法。。好啊在这一点上,请原谅显而易见的一点,但是在你的工具箱中有
std::string
,一个自定义
string
可以说扩展到了同样的过度使用,但我想你必须与你带来的那一个跳舞=Pwell一些部分使用std::string,但整个代码库仍然没有使用它。我将事件类的构造函数的参数作为自定义字符串对象获取。(这是mysql的一个分支)。我不认为您可以只在地图中使用
String
索引并拥有
String
成员变量?或者作为一种彻底的混乱手段,使用
std::shared_ptr
作为键和成员(但egads很可怕)。老实说,不管怎样,我都会使用
std::string
。其他任何事情都是令人憎恶的。