gpt4 book ai didi

添加到 std::map 的 C++ 宏

转载 作者:行者123 更新时间:2023-11-28 02:37:42 24 4
gpt4 key购买 nike

我是 C++ 的新手。我大约上周才开始接受它。

我正在尝试编写一个宏来访问 std::map 并将其添加到 std::map 中。但是,我发现这不起作用。我做错了什么或者有更好的方法来实现它吗?

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

typedef struct {
std::string name;
int value;
} Token;

std::map<std::string, Token> ALL_TOKENS;

#define T(macro, name, value) \
Token macro {name, value}; \
ADD(name, macro); \
T(TEST, "Test", 1); \

#define ADD(str, tok) \
ALL_TOKENS.insert(std::pair<std::string, Token>(str, tok)); \

#define GET(str) \
ALL_TOKENS[str]; \

int main(int argc, const char * argv[]) {
Token tok = GET("Test");
printf("%s", tok.name.c_str());
return 0;
}

最佳答案

在我看来,您的宏使代码更难理解。在我看来,您还没有完全理解 std::map

当我使用 map 时,我通常使用 operator[] 进行插入,也可能用于检索。如果您将其视为基本上可以使用任何(可排序)类型作为下标的数组,这通常是最简单的。

例如,要计算每个单词在文件中出现的频率,您可以这样做:

std::string word;
std::map<std::string, size_t> counts;

while (infile >> word)
++counts[word];

然后您可以打印出所有单词以及每个单词被找到的频率(按字母顺序),代码如下:

for (auto const &w : counts)
std::cout << w.first << "\t" << w.second << "\n";

至少对我来说,这似乎比我使用您的宏编写的任何代码都更简单、更容易理解。

关于添加到 std::map 的 C++ 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26953021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com