0

如果我提前违反本网站的任何规则,我深表歉意。我只是注册问这个。

假设我上课。它将有几个用于数据成员的字符串和一些用于处理这些字符串的函数。

在进行处理时,希望将 std::map 容器用作查找表。这个想法是,地图只会根据表格的内容从一个字符串转换为其他字符串。

我的问题基本上是,最好的方法是什么?我不希望班级的用户甚至知道表格;它们完全隐藏在类的实现中。这就是为什么我认为我应该将它们设为私有静态成员,但我不确定。

我不知道是否允许这样做。换句话说,我将在哪里填充地图?我猜可能在 .cpp 文件中。

无论如何,任何指导将不胜感激。再说一次,如果这个问题在其他地方,或者我在这个站点上做错了什么,请让某人删除它。

4

2 回答 2

0

将地图包装在您的类中,一个简单的示例:

class YourClass
{
    std::map<std::string, std::string> m;
public:

    const std::string &get(const std::string &s) const
    {
        return m.at(s);
    }

    void put(const std::string &s1, const std::string &s2)
    {
        m.insert(std::make_pair(s1, s2));
    }
};
于 2013-04-19T11:18:56.573 回答
0

如果map将包含 的所有实例的相同数据,class则 aprivate const std::map<std::string, std::string>是合理的,并且可以在 的.cpp实现文件中初始化class

// .h
class map_holder
{
public:
    std::string get(std::string const& a_name) const
    {
        auto i(m_.find(a_name));
        if (i != m_.end()) return i->second;
        return "";
    }
private:
    static const std::map<std::string, std::string> m_;
};

// .cpp
const std::map<std::string, std::string> map_holder::m_
    { { "one", "1" },
      { "two", "2" }
    };

如果 C++11 不可用,请使用boost::assign::map_list_of

const std::map<std::string, std::string> map_holder::m_ =
    boost::assign::map_list_of( "one", "1" )( "two", "2" );
于 2013-04-19T11:18:05.820 回答