C ++中的非法间接

时间:2015-07-12 13:39:30

标签: c++ dictionary stl iterator

我无法弄清楚为什么会出现非法间接错误:

#include <iostream>
#include <algorithm>
#include <stack>
#include <unordered_map>

using namespace std;

int main()
{
    string s1 = "";
    stack<char> s;
    unordered_map<char, char> m;

    m.insert('(', ')');
    m.insert('{', '}');
    m.insert('[', ']');

    for (auto x : s1)
    {
        if (m.find(x) != m.end()) s.push(x);

        else 
        {
            auto it = m.find(s.top());
            if (s.empty() || (it->second) != x) { cout << "Invalid\n"; s.pop(); break; } 
        }

    }

}

它是地图条目的迭代器,我试图访问它的值。

2 个答案:

答案 0 :(得分:5)

您必须按照以下方式更正插入unordered_map<>

m.insert(std::make_pair('(', ')'));
m.insert(std::make_pair('{', '}'));
m.insert(std::make_pair('[', ']'));

演示:http://coliru.stacked-crooked.com/a/a2fff8b2f36ebc3c

要插入unordered_map<>的其他几个选项:

m.emplace('(', ')');
m.emplace('{', '}');
m.emplace('[', ']');

OR

m.insert(std::pair<char,char>('(', ')'));
m.insert(std::pair<char,char>('{', '}'));
m.insert(std::pair<char,char>('[', ']'));

修改

还有一个选择:

m.emplace(std::make_pair('(', ')'));
m.emplace(std::make_pair('{', '}'));
m.emplace(std::make_pair('[', ']'));

答案 1 :(得分:4)

还有另一种“插入”地图的方法,原始答案没有注明[]运算符:

m['('] = ')';
m['{'] = '}';
m['['] = ']';