如何使用包含c ++ map的数组

时间:2014-11-07 08:51:33

标签: c++

我很难理解代码的这一部分?是否可以获得图片/图解说明。

//test.h
typedef std::map<std::string, std::string> mType;
    static const m_Type::value_type data[] = {
        m_Type::value_type("A", "B"),
        m_Type::value_type("C", "D"),
        m_Type::value_type("E", "F")
    };
//test.cc
void test(std::map<std::string, std::string>::value_type data)
{
    cout<<data[0].first<<endl;
}
//main.cc
test(data);

在main.cc中我想调用test()来打印元素但是会出错

main.cc: In function 'void test(std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >)':
main.cc:10: error: no match for 'operator[]' in 'data[0]'

2 个答案:

答案 0 :(得分:1)

您必须按以下方式声明该功能

void test( const std::map<std::string, std::string>::value_type data[] )
{
    cout<<data[0].first<<endl;
}

因为原始数据被定义为您要传递给函数的数组。否则,您可能不会使用下标运算符。

此外,您还需要使用限定符const作为参数,因为数组数据也被定义为常量数组。

至于这种类型

m_Type::value_type 

然后它相当于std::pair<const std::string, std::string>所以这个声明

static const m_Type::value_type data[] = { /*...*/ };

相当于

static const std::pair<const std::string, std::string> data[] = { /*...*/ };

答案 1 :(得分:0)

你应该通过测试value_type而不是整个地图。 value_type对应一对(键,值),并在stdlib中定义如下:typedef pair<const Key, Type> value_type;

因此data[0]毫无意义。应为data.first