更简洁的C++版本可能吗?

2 c++ stl

我刚写了一些大致如下的C++代码: -

int i;
string out;
map<char, string>::const_iterator it;

for (i = 0; i < inp.size(); ++i) {
    it = mydict.find(inp[i]);
    if (it != mydict.end())
        out += mydict[inp[i]];
    else
        out += inp[i];
}
Run Code Online (Sandbox Code Playgroud)

我不写很多C++代码,我正在寻找改进相同的建议.我尝试了如下的内容,但是我收到了一个incompatible operand types ('mapped_type' (aka 'std::basic_string<char>') and 'char')错误:

int i;
string out;
map<char, string>::const_iterator it;

for (i = 0; i < inp.size(); ++i) {
    it = mydict.find(inp[i]);
    out += (it != mydict.end() ? mydict[inp[i]] : inp[i]);
}
Run Code Online (Sandbox Code Playgroud)

有任何纠正上述错误的建议吗?或者有什么建议可以更好地编写相同的代码?

Mat*_* M. 5

在C++ 11中,您可以简化循环结构本身:

for (char c: inp) {
    auto it = mydict.find(c);
    it != mydict.end() ? out += it->second : out += c; // little known use ;)
}
Run Code Online (Sandbox Code Playgroud)

除此之外,我建议您使用it->second而不是c再次执行查找.