首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >const std::map<boost::tuples::tuple,std::string>?

const std::map<boost::tuples::tuple,std::string>?
EN

Stack Overflow用户
提问于 2009-07-07 21:05:24
回答 2查看 6.3K关注 0票数 8
代码语言:javascript
复制
// BOOST Includes
#include <boost/assign.hpp>             // Boost::Assign
#include <boost/assign/list_of.hpp>     // Boost::Assign::List_Of
#include <boost/assign/std/map.hpp>     // Boost::Assign::Map_List_Of
#include <boost/tuple/tuple.hpp>        // Boost::Tuples
// STD Includes
#include <map>
#include <vector>
#include <string>
// Using namespaces
using namespace std;
using namespace boost;
using namespace boost::assign;
// Consts
    const map<string, string> query_map = map_list_of<string, string>
    ("4556_SELECT_FILENAME", "SELECT FILENAME FROM Files WHERE PMU_ID = 4556")
    ("7552_SELECT_FILENAME", "SELECT FILENAME FROM Files WHERE PMU_ID = 7552")
    ("234x_SELECT_FILENAME", "SELECT FILENAME FROM Files WHERE PMU_ID = 2344 OR PMU_ID = 2345 OR PMU_ID = 2346 OR PMU_ID = 2347 OR PMU_ID = 2348")
    ("813x_SELECT_FILENAME", "SELECT FILENAME FROM Files WHERE PMU_ID = 8132 OR PMU_ID = 8133 OR PMU_ID = 8134 OR PMU_ID = 8135 OR PMU_ID = 8136");
    const map<string, std::vector<int>> vector_map = map_list_of<string, std::vector<int>>
    ("4556", list_of(4556))
    ("7552", list_of(7552))
    ("234x", list_of(2344)(2345)(2346)(2347)(2348))
    ("813x", list_of(8132)(8133)(8134)(8135)(8136));

使用boost -可以初始化const std::containers用于测试等,创建const std::map或std::map非常简单,如上面的代码所示。创建一个const map<string, std::vector<int>>要复杂一些--但仍然相当简单。

我正在尝试想出一个const std::map<boost::tuples::tuple<string, string, string>, string>,但是我无法初始化它。还有没有其他人用过它?

代码语言:javascript
复制
// Typedefs
typedef boost::tuples::tuple<string, string, string> x3_string_tuple;
// Constants
const map<x3_string_tuple, string> query_selector_map = map_list_of<x3_string_tuple, string>
("4556", "SELECT", "FILENAME"), "4556_SELECT_FILENAME"); // ETC.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-07 22:17:08

我尝试过这样做,但失败了,因为映射的键需要是可比较的(对于std::less,因此需要定义一个operator< )。在头boost/tuple/tuple_comparison.hpp中定义了boost::tuple的比较运算符。

在包含了这些内容之后,下面的代码运行得很好:

代码语言:javascript
复制
#include <boost/assign/list_of.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/tuple/tuple_comparison.hpp>
#include <map>
#include <string>

using std::string;
typedef boost::tuple<string, string, string> tpl_t;

int main() {
    using boost::assign::map_list_of;
    std::map<tpl_t, string> const m = 
        map_list_of(tpl_t("a","b","c"), "c")(tpl_t("x","y","c"), "z");
}
票数 22
EN

Stack Overflow用户

发布于 2009-07-07 21:29:36

我会试着

代码语言:javascript
复制
const map<x3_string_tuple, string> query_selector_map = map_list_of<x3_string_tuple, string>
(x3_string_tuple("4556", "SELECT", "FILENAME"), "4556_SELECT_FILENAME");

但是,老实说,也许更简单的方法是有3个单独的字符串列表,然后一个接一个地将它们组合成一个元组,并将其添加到一个映射中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1094865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档