C++ 使用istringstream将std::string标记为std::map

C++ 使用istringstream将std::string标记为std::map,c++,string,parsing,vector,stl,C++,String,Parsing,Vector,Stl,我有一个包含如下数据的向量: std::vector<std::string> v; v[0] = "first:tom"; v[1] = "last:jones"; 我被插入到std::map上的操作卡住了,因为我看不出解析如何为我提供可以插入到map中的两个片段 两者都不是v[i] 我想: m.insert(std::pair<std::string, std::string>("first", "tom")); m.insert(std::pair<std

我有一个包含如下数据的向量:

std::vector<std::string> v;

v[0] = "first:tom";
v[1] = "last:jones";
我被插入到
std::map
上的操作卡住了,因为我看不出解析如何为我提供可以插入到map中的两个片段

两者都不是v[i]

我想:

m.insert(std::pair<std::string, std::string>("first", "tom"));
m.insert(std::pair<std::string, std::string>("last", "jones"));   
m.insert(std::pair(“first”、“tom”);
m、 插入(标准::对(“最后”、“琼斯”);
有人能解释我的困难吗?

类似这样的话:

std::vector<std::string> v;
std::map<std::string, std::string> m;
std::pair<std::string, std::string> p;

for(int i = 0; i < v.size(); i++) 
{
    std::cout << v[i] << std::endl;

    std::istringstream oss(v[i]);
    std::string key;
    std::string value;

    while(getline(oss, key, ':') && getline(oss, value)) 
    {
        m.insert(std::pair<std::string, std::string>(key, value));
    }               
 }
std::vector v;
std::map m;
std::对p;
对于(int i=0;i
std::vector<std::string> v;
std::map<std::string, std::string> m;
std::pair<std::string, std::string> p;

for(int i = 0; i < v.size(); i++) 
{
    std::cout << v[i] << std::endl;

    std::istringstream oss(v[i]);
    std::string key;
    std::string value;

    while(getline(oss, key, ':') && getline(oss, value)) 
    {
        m.insert(std::pair<std::string, std::string>(key, value));
    }               
 }
std::vector v;
std::map m;
std::对p;
对于(int i=0;i
std::vector v;
std::map m;
对于(int i=0;i
std::vector v;
std::map m;
对于(int i=0;i
其中
chopKeyValue
为:

pair<string, string> chopKeyValue(const string& keyValue) {
    string::size_type colon = keyValue.find(':');
    return make_pair(keyValue.substr(0, colon), keyValue.substr(colon+1));
}
对chopKeyValue(常量字符串和keyValue){
字符串::size_type冒号=keyValue.find(':');
返回make_对(keyValue.substr(0,冒号),keyValue.substr(冒号+1));
}
使用:

其中
chopKeyValue
为:

pair<string, string> chopKeyValue(const string& keyValue) {
    string::size_type colon = keyValue.find(':');
    return make_pair(keyValue.substr(0, colon), keyValue.substr(colon+1));
}
对chopKeyValue(常量字符串和keyValue){
字符串::size_type冒号=keyValue.find(':');
返回make_对(keyValue.substr(0,冒号),keyValue.substr(冒号+1));
}
还有另一个选项(C++11):

std::vector v={“first:tom”,“last:jones”};
std::map m;
用于(std::string const&s:v){
自动i=s.find(“:”);
m[s.substr(0,i)]=s.substr(i+1);
}
还有另一个选项(C++11):

std::vector v={“first:tom”,“last:jones”};
std::map m;
用于(std::string const&s:v){
自动i=s.find(“:”);
m[s.substr(0,i)]=s.substr(i+1);
}

这很有效,我喜欢通过2
substr
operations@Jason:请务必检查
sepPosition
的值,并确认它不等于
std::string::npos
。这是有效的,我喜欢通过2
substr
operations@Jason:确保检查
sepPosition并确认它不等于
std::string::npos
。确保检查sepPosition的值并确认它不等于实代码中的
std::string::npos
。确保检查sepPosition的值并确认它不等于实代码中的
std::string::npos
pair<string, string> chopKeyValue(const string& keyValue) {
    string::size_type colon = keyValue.find(':');
    return make_pair(keyValue.substr(0, colon), keyValue.substr(colon+1));
}
std::vector<std::string> v = { "first:tom", "last:jones" };
std::map<std::string,std::string> m;

for (std::string const & s : v) {
    auto i = s.find(':');
    m[s.substr(0,i)] = s.substr(i + 1);
}