gpt4 book ai didi

c++ - 如何在 map 中使用 STL 未排序的键值对

转载 作者:太空宇宙 更新时间:2023-11-03 10:35:50 25 4
gpt4 key购买 nike

我需要使用STL C++ 映射来存储键值对。我需要在STL map中存储多个数据信息。例如

需要以字符串格式存储数据类型、数据及其行为(in param/outparam)。但是 map 总是使用键值对

所以如果我像这样存储

std::map<map<"int","50",>"behavior">. 

但它总是根据我不想要的键对数据进行排序。如果我使用像..

pair<string, pair<string,string> >;
pair<string, pair<string,string>>("int",("100","in"));

这样提示编译时错误!

错误 C2664:“std::pair<_Ty1,_Ty2>::pair(const std::pair<_Ty1,_Ty2> &)”:无法将参数 1 从“const char *”转换为“const std::对<_Ty1,_Ty2> &'

上述问题的准确解应该是什么?

问候

最佳答案

如果您不想排序,请不要使用像 map 或 set 这样的有序容器。您可以使用类和 vector 来实现您正在寻找的东西。 std::map 的排序特性使得按键查找变得高效。如果您想要/需要未排序的和更像散列的查找行为,请查看 Boost unordered containers .请注意,这并不能保证订单中的订单将是订单中的订单。我假设您想保留放入容器中的类型的顺序,下面的示例将执行此操作。

#include <iostream>
#include <vector>

using namespace std;

class DataBehavior
{
public:
DataBehavior(const string &type,
const string &data,
const string &behavior)
:type(type), data(data), behavior(behavior)
{
}

const string &getType() const { return type; }
const string &getData() const { return data; }
const string &getBehavior() const { return behavior; }

private:
string type;
string data;
string behavior;
};

typedef vector<DataBehavior> Ctr;

int main (int argc, char *argv[])
{
Ctr ctr;
ctr.push_back(DataBehavior("int", "50", "behavior"));
ctr.push_back(DataBehavior("int", "80", "behavior"));
ctr.push_back(DataBehavior("string", "25", "behavior2"));

for (Ctr::const_iterator it = ctr.begin(); it != ctr.end(); ++it)
{
cout << "Type: " << it->getType() << " "
<< "Data: " << it->getData() << " "
<< "Behavior: " << it->getBehavior() << "\n";
}
return 1;
}

关于c++ - 如何在 map 中使用 STL 未排序的键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3829955/

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