- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 C++ 中有以下格式的字符串 vector
word1_word2_word3 : val
word1
可以是
{str1, str2, str3, str4}
中的任意字符串
word2
可以是
{anotherstr1, anotherstr2,...,anotherstr12}
中的任意字符串
word3
可以是
{yetanotherstr1, yetanotherstr2}
中的任意字符串
anotherstr1 : str1: yetanotherstr1 : its_value
yetanotherstr2 : its_value
str2: yetanotherstr1 : its_value
yetanotherstr2 : its_value
...
...
str4: yetanotherstr1 : its_value
yetanotherstr2 : its_value
anotherstr2 : str1: yetanotherstr1 : its_value
yetanotherstr2 : its_value
str2: yetanotherstr1 : its_value
yetanotherstr2 : its_value
...
...
str4: yetanotherstr1 : its_value
yetanotherstr2 : its_value
.........
.........
anotherstr12 : str1: yetanotherstr1 : its_value
yetanotherstr2 : its_value
str2: yetanotherstr1 : its_value
yetanotherstr2 : its_value
...
...
str4: yetanotherstr1 : its_value
yetanotherstr2 : its_value
所有这些字符串值都是动态的。
for (each vector)
{
parse_params_in_string(*i, word1, word2, word3);
std::map outermap;
std::map innermap;
for(each word 1 and word3 combination)
build_map_elements
outermap.insert(innermap)
..
}
但是上面的代码每次都会创建新的内部映射并将其附加到外部映射,这是错误的。如何将这些值附加到外部 map ?
最佳答案
看着你想要的输出,我决定创建一个 std::map
的 std::map
的 std::map
键和值是 std::string
我为了能测试代码,我们先建一个std::vector
的 std::string
并使用您指定的单词作为输入。
对于给定的示例数据,我们将得到 std::vector
有 96 个元素。所以,12 * 4 * 2 个字符串。
下一部分就是你想要的。首先我们拆分 std::string
.我已经发布了很多关于如何拆分字符串的答案。参见示例 here .
这次我将使用正则表达式,因为您的问题不是关于拆分字符串,而是关于如何构建字典。
无论如何,我们填写 std::vector
使用 std::sregex_token_iterator
分割子串.所以,最后,你的话将在这个子字符串 vector 中。
我们将对所有 std::string
应用此操作s 在 std::vector
在基于 for 循环的简单范围内。
取回单词后,我们需要将数据添加到 map 中。
在这里,我们将使用 std::maps
s 索引运算符。请仔细阅读 here .请特别阅读
Returns a reference to the value that is mapped to a key equivalent to key, performing an insertion if such key does not already exist.
std::map
中,它将被添加。而且,在任何情况下,如果 key 已经存在或刚刚创建,则将返回对该数据的引用。而且,对于嵌套映射,我们当然可以级联索引运算符。因此,在下面的代码行中:
mapData[substrings[1]][substrings[0]][substrings[2]] = substrings[3];
首先,将创建最外层的数据,并且无论如何都会返回一个引用。下一个内部
std::map
现在也会发生同样的情况。等等。
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
#include <regex>
#include <map>
#include <iomanip>
// We want to build a vector of test strings
// For this we will use word pools
std::vector<std::string> word1Pool{ "str1", "str2", "str3", "str4" };
std::vector<std::string> word2Pool{ "anotherstr01", "anotherstr02", "anotherstr03", "anotherstr04", "anotherstr05",
"anotherstr06","anotherstr07", "anotherstr08", "anotherstr09", "anotherstr10", "anotherstr11", "anotherstr12" };
std::vector<std::string> word3Pool{ "yetanotherstr1", "yetanotherstr2" };
// A regex to split the strings
const std::regex re{ R"([a-zA-Z0-9]+)" };
// Some driver code
int main() {
// First, we build a string with all possible combinations of word fragments. Overall: 12*4*2 = 96
size_t counter{};
// Here we will build some demo source data. A vector with all combinations of the given words
std::vector<std::string> sourceData{};
for (const std::string& word1 : word1Pool)
for (const std::string& word2 : word2Pool)
for (const std::string& word3 : word3Pool)
sourceData.emplace_back(word1 + "_" + word2 + "_" + word3 + " : itsvalue" + std::to_string(++counter));
// Show the demo stings on the screen
std::copy(sourceData.begin(), sourceData.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
// ----------------------------------------------------------------------------------------------
// This will be our nested map. It will hold the target data
std::map<std::string, std::map<std::string, std::map<std::string, std::string>>> mapData;
// Build the data in the map
for (const std::string& line : sourceData) {
// Split the line with demo data
std::vector substrings(std::sregex_token_iterator(line.begin(), line.end(), re), {});
// Add data to map
mapData[substrings[1]][substrings[0]][substrings[2]] = substrings[3];
}
// ----------------------------------------------------------------------------------------------
// Display resulting data on screen
std::string oldKey1{}, oldKey2{}, oldKey3{};
for (const auto& [key1, mapOuter] : mapData) {
for (const auto [key2, mapInner] : mapOuter) {
for (const auto [key3, dataInner] : mapInner) {
std::cout << std::left << std::setw(12)
<< ((oldKey1 == key1) ? std::string{} : key1) << ((oldKey1 == key1) ? " " : " : ")
<< std::setw(4)
<< ((oldKey2 == key2) ? std::string{} : key2) << ((oldKey2 == key2) ? " " : ": ")
<< std::setw(14)
<< ((oldKey3 == key3) ? std::string{} : key3) << ((oldKey3 == key3) ? " " : " : ")
<< dataInner << '\n';
oldKey1 = key1;
oldKey2 = key2;
oldKey3 = key3;
}
}
}
return 0;
}
str1_anotherstr01_yetanotherstr1 : itsvalue1
str1_anotherstr01_yetanotherstr2 : itsvalue2
str1_anotherstr02_yetanotherstr1 : itsvalue3
str1_anotherstr02_yetanotherstr2 : itsvalue4
str1_anotherstr03_yetanotherstr1 : itsvalue5
str1_anotherstr03_yetanotherstr2 : itsvalue6
str1_anotherstr04_yetanotherstr1 : itsvalue7
str1_anotherstr04_yetanotherstr2 : itsvalue8
str1_anotherstr05_yetanotherstr1 : itsvalue9
str1_anotherstr05_yetanotherstr2 : itsvalue10
str1_anotherstr06_yetanotherstr1 : itsvalue11
str1_anotherstr06_yetanotherstr2 : itsvalue12
str1_anotherstr07_yetanotherstr1 : itsvalue13
str1_anotherstr07_yetanotherstr2 : itsvalue14
str1_anotherstr08_yetanotherstr1 : itsvalue15
str1_anotherstr08_yetanotherstr2 : itsvalue16
str1_anotherstr09_yetanotherstr1 : itsvalue17
str1_anotherstr09_yetanotherstr2 : itsvalue18
str1_anotherstr10_yetanotherstr1 : itsvalue19
str1_anotherstr10_yetanotherstr2 : itsvalue20
str1_anotherstr11_yetanotherstr1 : itsvalue21
str1_anotherstr11_yetanotherstr2 : itsvalue22
str1_anotherstr12_yetanotherstr1 : itsvalue23
str1_anotherstr12_yetanotherstr2 : itsvalue24
str2_anotherstr01_yetanotherstr1 : itsvalue25
str2_anotherstr01_yetanotherstr2 : itsvalue26
str2_anotherstr02_yetanotherstr1 : itsvalue27
str2_anotherstr02_yetanotherstr2 : itsvalue28
str2_anotherstr03_yetanotherstr1 : itsvalue29
str2_anotherstr03_yetanotherstr2 : itsvalue30
str2_anotherstr04_yetanotherstr1 : itsvalue31
str2_anotherstr04_yetanotherstr2 : itsvalue32
str2_anotherstr05_yetanotherstr1 : itsvalue33
str2_anotherstr05_yetanotherstr2 : itsvalue34
str2_anotherstr06_yetanotherstr1 : itsvalue35
str2_anotherstr06_yetanotherstr2 : itsvalue36
str2_anotherstr07_yetanotherstr1 : itsvalue37
str2_anotherstr07_yetanotherstr2 : itsvalue38
str2_anotherstr08_yetanotherstr1 : itsvalue39
str2_anotherstr08_yetanotherstr2 : itsvalue40
str2_anotherstr09_yetanotherstr1 : itsvalue41
str2_anotherstr09_yetanotherstr2 : itsvalue42
str2_anotherstr10_yetanotherstr1 : itsvalue43
str2_anotherstr10_yetanotherstr2 : itsvalue44
str2_anotherstr11_yetanotherstr1 : itsvalue45
str2_anotherstr11_yetanotherstr2 : itsvalue46
str2_anotherstr12_yetanotherstr1 : itsvalue47
str2_anotherstr12_yetanotherstr2 : itsvalue48
str3_anotherstr01_yetanotherstr1 : itsvalue49
str3_anotherstr01_yetanotherstr2 : itsvalue50
str3_anotherstr02_yetanotherstr1 : itsvalue51
str3_anotherstr02_yetanotherstr2 : itsvalue52
str3_anotherstr03_yetanotherstr1 : itsvalue53
str3_anotherstr03_yetanotherstr2 : itsvalue54
str3_anotherstr04_yetanotherstr1 : itsvalue55
str3_anotherstr04_yetanotherstr2 : itsvalue56
str3_anotherstr05_yetanotherstr1 : itsvalue57
str3_anotherstr05_yetanotherstr2 : itsvalue58
str3_anotherstr06_yetanotherstr1 : itsvalue59
str3_anotherstr06_yetanotherstr2 : itsvalue60
str3_anotherstr07_yetanotherstr1 : itsvalue61
str3_anotherstr07_yetanotherstr2 : itsvalue62
str3_anotherstr08_yetanotherstr1 : itsvalue63
str3_anotherstr08_yetanotherstr2 : itsvalue64
str3_anotherstr09_yetanotherstr1 : itsvalue65
str3_anotherstr09_yetanotherstr2 : itsvalue66
str3_anotherstr10_yetanotherstr1 : itsvalue67
str3_anotherstr10_yetanotherstr2 : itsvalue68
str3_anotherstr11_yetanotherstr1 : itsvalue69
str3_anotherstr11_yetanotherstr2 : itsvalue70
str3_anotherstr12_yetanotherstr1 : itsvalue71
str3_anotherstr12_yetanotherstr2 : itsvalue72
str4_anotherstr01_yetanotherstr1 : itsvalue73
str4_anotherstr01_yetanotherstr2 : itsvalue74
str4_anotherstr02_yetanotherstr1 : itsvalue75
str4_anotherstr02_yetanotherstr2 : itsvalue76
str4_anotherstr03_yetanotherstr1 : itsvalue77
str4_anotherstr03_yetanotherstr2 : itsvalue78
str4_anotherstr04_yetanotherstr1 : itsvalue79
str4_anotherstr04_yetanotherstr2 : itsvalue80
str4_anotherstr05_yetanotherstr1 : itsvalue81
str4_anotherstr05_yetanotherstr2 : itsvalue82
str4_anotherstr06_yetanotherstr1 : itsvalue83
str4_anotherstr06_yetanotherstr2 : itsvalue84
str4_anotherstr07_yetanotherstr1 : itsvalue85
str4_anotherstr07_yetanotherstr2 : itsvalue86
str4_anotherstr08_yetanotherstr1 : itsvalue87
str4_anotherstr08_yetanotherstr2 : itsvalue88
str4_anotherstr09_yetanotherstr1 : itsvalue89
str4_anotherstr09_yetanotherstr2 : itsvalue90
str4_anotherstr10_yetanotherstr1 : itsvalue91
str4_anotherstr10_yetanotherstr2 : itsvalue92
str4_anotherstr11_yetanotherstr1 : itsvalue93
str4_anotherstr11_yetanotherstr2 : itsvalue94
str4_anotherstr12_yetanotherstr1 : itsvalue95
str4_anotherstr12_yetanotherstr2 : itsvalue96
anotherstr01 : str1: yetanotherstr1 : itsvalue1
yetanotherstr2 : itsvalue2
str2: yetanotherstr1 : itsvalue25
yetanotherstr2 : itsvalue26
str3: yetanotherstr1 : itsvalue49
yetanotherstr2 : itsvalue50
str4: yetanotherstr1 : itsvalue73
yetanotherstr2 : itsvalue74
anotherstr02 : str1: yetanotherstr1 : itsvalue3
yetanotherstr2 : itsvalue4
str2: yetanotherstr1 : itsvalue27
yetanotherstr2 : itsvalue28
str3: yetanotherstr1 : itsvalue51
yetanotherstr2 : itsvalue52
str4: yetanotherstr1 : itsvalue75
yetanotherstr2 : itsvalue76
anotherstr03 : str1: yetanotherstr1 : itsvalue5
yetanotherstr2 : itsvalue6
str2: yetanotherstr1 : itsvalue29
yetanotherstr2 : itsvalue30
str3: yetanotherstr1 : itsvalue53
yetanotherstr2 : itsvalue54
str4: yetanotherstr1 : itsvalue77
yetanotherstr2 : itsvalue78
anotherstr04 : str1: yetanotherstr1 : itsvalue7
yetanotherstr2 : itsvalue8
str2: yetanotherstr1 : itsvalue31
yetanotherstr2 : itsvalue32
str3: yetanotherstr1 : itsvalue55
yetanotherstr2 : itsvalue56
str4: yetanotherstr1 : itsvalue79
yetanotherstr2 : itsvalue80
anotherstr05 : str1: yetanotherstr1 : itsvalue9
yetanotherstr2 : itsvalue10
str2: yetanotherstr1 : itsvalue33
yetanotherstr2 : itsvalue34
str3: yetanotherstr1 : itsvalue57
yetanotherstr2 : itsvalue58
str4: yetanotherstr1 : itsvalue81
yetanotherstr2 : itsvalue82
anotherstr06 : str1: yetanotherstr1 : itsvalue11
yetanotherstr2 : itsvalue12
str2: yetanotherstr1 : itsvalue35
yetanotherstr2 : itsvalue36
str3: yetanotherstr1 : itsvalue59
yetanotherstr2 : itsvalue60
str4: yetanotherstr1 : itsvalue83
yetanotherstr2 : itsvalue84
anotherstr07 : str1: yetanotherstr1 : itsvalue13
yetanotherstr2 : itsvalue14
str2: yetanotherstr1 : itsvalue37
yetanotherstr2 : itsvalue38
str3: yetanotherstr1 : itsvalue61
yetanotherstr2 : itsvalue62
str4: yetanotherstr1 : itsvalue85
yetanotherstr2 : itsvalue86
anotherstr08 : str1: yetanotherstr1 : itsvalue15
yetanotherstr2 : itsvalue16
str2: yetanotherstr1 : itsvalue39
yetanotherstr2 : itsvalue40
str3: yetanotherstr1 : itsvalue63
yetanotherstr2 : itsvalue64
str4: yetanotherstr1 : itsvalue87
yetanotherstr2 : itsvalue88
anotherstr09 : str1: yetanotherstr1 : itsvalue17
yetanotherstr2 : itsvalue18
str2: yetanotherstr1 : itsvalue41
yetanotherstr2 : itsvalue42
str3: yetanotherstr1 : itsvalue65
yetanotherstr2 : itsvalue66
str4: yetanotherstr1 : itsvalue89
yetanotherstr2 : itsvalue90
anotherstr10 : str1: yetanotherstr1 : itsvalue19
yetanotherstr2 : itsvalue20
str2: yetanotherstr1 : itsvalue43
yetanotherstr2 : itsvalue44
str3: yetanotherstr1 : itsvalue67
yetanotherstr2 : itsvalue68
str4: yetanotherstr1 : itsvalue91
yetanotherstr2 : itsvalue92
anotherstr11 : str1: yetanotherstr1 : itsvalue21
yetanotherstr2 : itsvalue22
str2: yetanotherstr1 : itsvalue45
yetanotherstr2 : itsvalue46
str3: yetanotherstr1 : itsvalue69
yetanotherstr2 : itsvalue70
str4: yetanotherstr1 : itsvalue93
yetanotherstr2 : itsvalue94
anotherstr12 : str1: yetanotherstr1 : itsvalue23
yetanotherstr2 : itsvalue24
str2: yetanotherstr1 : itsvalue47
yetanotherstr2 : itsvalue48
str3: yetanotherstr1 : itsvalue71
yetanotherstr2 : itsvalue72
str4: yetanotherstr1 : itsvalue95
yetanotherstr2 : itsvalue96
关于c++ - 在 C++ 中将 vector 转换为嵌套映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62861746/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!