简体   繁体   English

将 object 插入 std::map

[英]inserting object into std::map

I have a function bool GateControl::addAuthorization(CardNumber number, const string& name, const string& startTime, const string& endTime) which is supposed to return false if an item was already inside the map and true if is not, if it is not inside the map insert the item in the map.我有一个 function bool GateControl::addAuthorization(CardNumber number, const string& name, const string& startTime, const string& endTime)如果项目已经在 map 内,它应该返回 false,如果不在,则返回 true map 将项目插入 map。 This is what I have:这就是我所拥有的:

struct Authorization
{
    Authorization() { }

    Authorization(CardNumber number, const string& name, const string& startTime, const string& endTime)
    : number_(number), name_(name), startTime_(startTime), endTime_(endTime) { }

    CardNumber number_;

    string name_;

    string startTime_;

    string endTime_;
};

typedef map<CardNumber, Authorization> AuthorizationMap;
typedef AuthorizationMap::iterator AuthorizationMapIterator;

typedef vector<Authorization> AuthorizationVector;
bool GateControl::addAuthorization(CardNumber number, const string& name, const string& startTime, const string& endTime)
{
    Authorization item;

    item = Authorization(number, name, startTime, endTime);

    if ( authorizationMap_.find(number) == authorizationMap_.end() ) {
      return false;
    } else {
        authorizationMap_.insert({number, item});

      return true;
    }

}

So, breaking this down, you want to find out if a key (number) exists in a std::map or not?所以,打破这个,你想知道一个键(数字)是否存在于 std::map 中?

Use the find operator, as shown here:使用 find 运算符,如下所示:

if ( AuthorizationMap.find(number) == AuthorizationMap.end() ) {
  // not found
} else {
  // found
}

or, more simply:或者,更简单地说:

// return false if number is already in AuthorizationMap
return (AuthorizationMap.find(number) == AuthorizationMap.end());

Documentation for the find function can be found here: https://www.cplusplus.com/reference/map/map/find/可在此处找到查找 function 的文档: https://www.cplusplus.com/reference/map/map/find/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM