我需要使用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;
}
我是一名优秀的程序员,十分优秀!