std::map的小小失误
namespace query_lib
{
typedef std::multimap<int, std::pair<std::string, size_t> > request_record_type;
static request_record_type _request_record;
/// 记录或标记函数功能请求 标记类型 pair<func_id, pair<func_param, record> >
bool add_request_record(const request_record_type::value_type& obj)
{
/// Lock lock(...);// todo lock
request_record_type::iterator lower_it = _request_record.upper_bound(obj.first);
for (; lower_it != _request_record.end(); ++lower_it )
{
if (lower_it->first != obj.first)
break;
else if ( lower_it->second.first == obj.second.first)
{
++lower_it->second.second;
return false;
}
}
_request_record.insert(lower_it, obj);
return true;
}
/// 擦除函数功能请求的记录或标记 标记类型 pair<func_id, pair<func_param, record> >
void del_request_record(const request_record_type::value_type& obj)
{
/// Lock lock(...);// todo lock
request_record_type::iterator upper_it = _request_record.upper_bound(obj.first);
request_record_type::iterator lower_it = _request_record.lower_bound(obj.first);
for (request_record_type::iterator iter = upper_it; iter != lower_it; ++iter)
{
if (iter->first == obj.first && iter->second.first == obj.second.first)
{
if (0 != iter->second.second)
{
--(iter->second.second);
}
else
assert(false);
}
}
}
bool test_request_record(const request_record_type::value_type& obj)
{
/// Lock lock(...);// todo lock
request_record_type::iterator upper_it = _request_record.upper_bound(obj.first);
request_record_type::iterator lower_it = upper_it;
for (; lower_it != _request_record.end();
++lower_it )
{
if (lower_it->first != obj.first)
break;
else if ( lower_it->second.first == obj.second.first &&
obj.second.second != 0)
return true;
}
return false;
}
map::lower_bound
iterator lower_bound ( const key_type& x );
const_iterator lower_bound ( const key_type& x ) const;
Unlike upper_bound, this member function returns an iterator to the element also if it compares equal to x and not only if it compares greater.
Notice that, internally, all the elements in a map container are always ordered by their keys following the criterion defined by its comparison object, therefore all the elements that follow the one returned by this function will have a key that compares greater than x.