Boost ptree get<;标准::字符串>;()是否返回不可打印的字符?

Boost ptree get<;标准::字符串>;()是否返回不可打印的字符?,boost,ascii,stdmap,Boost,Ascii,Stdmap,我想知道,如果调用ptree get函数,是否可能: 在JSON字符串上获取(“字符串”)以返回不可打印的字符?如果是这样,我如何筛选出最好的 我看到的问题是,我将字符串插入到一个std::map中,此后的每个实例都应该只更新原始条目,但结果是我最终得到了多个条目。 我使用if(mymap->insert(std::make_pair(str,dat)).second==false){(其中str是上述get()函数的结果)检查现有条目,或者插入新条目。 dat是与str关联的数据结构,如果条目

我想知道,如果调用ptree get函数,是否可能:
在JSON字符串上获取(“字符串”)以返回不可打印的字符?如果是这样,我如何筛选出最好的 我看到的问题是,我将字符串插入到一个
std::map
中,此后的每个实例都应该只更新原始条目,但结果是我最终得到了多个条目。

我使用
if(mymap->insert(std::make_pair(str,dat)).second==false){
(其中
str
是上述
get()
函数的结果)检查现有条目,或者插入新条目。
dat
是与
str
关联的数据结构,如果条目已经存在,则应更新该结构(在
false
情况下发生)

我想知道,如果调用ptree get函数,是否可能: 在JSON字符串上获取(“字符串”)以返回不可打印的字符

在(JSON)字符串上调用
get
是不可能的。您可以
ptree上调用它,当然它可以返回数据。因此,如果该数据包含不可打印的内容,那么它们就在您的数据中

我使用
if(mymap->insert(std::make_pair(str,dat)).second==false){
(其中
str
是上述
get()
函数的结果)检查现有条目,或者插入新条目。

这是正确的方法-假设您的密钥等价性由
std::less
给出

dat是与str关联的数据结构,如果条目已经存在,则应更新该数据结构(在false情况下发生)

在这种情况下,考虑<强>不<强>检查存在性,但实际上只是更新:

 mymap[str] = dat;
如果键不存在,这将自动插入新元素。请注意,这将而不是更改键的行为

演示 简化以检查您的理解:

#include <map>
#include <string>
#include <iostream>
#include <iomanip>

struct dat {
    int i, j, k;
};

static inline std::ostream& operator<<(std::ostream& os, dat const& d) {
    return os << "{" << d.i << "," << d.j << "," << d.k << "}";
}

using Map = std::map<std::string, dat>;

void dump(Map const& m) {
    std::cout << " --- Map: \n";
    for (auto& entry : m) {
        std::cout << std::quoted(entry.first) << " -> " << entry.second << "\n";
    }
}

int main() {
    Map mymap {
        { "one", {1,2,3} },
        { "two", {2,4,6} },
        { "three", {3,6,9} },
    };

    dump(mymap);

    mymap["four"] = {4,8,12}; // adds
    dump(mymap);

    mymap["three"] = {0,0,0}; // overwrites
    dump(mymap);

    mymap["three "] = {-1,-1,-1}; // adds new key
    dump(mymap);
}

⑨弱全序

 --- Map: 
"one" -> {1,2,3}
"three" -> {3,6,9}
"two" -> {2,4,6}
 --- Map: 
"four" -> {4,8,12}
"one" -> {1,2,3}
"three" -> {3,6,9}
"two" -> {2,4,6}
 --- Map: 
"four" -> {4,8,12}
"one" -> {1,2,3}
"three" -> {0,0,0}
"two" -> {2,4,6}
 --- Map: 
"four" -> {4,8,12}
"one" -> {1,2,3}
"three" -> {0,0,0}
"three " -> {-1,-1,-1}
"two" -> {2,4,6}