C++11 适合我的要求的最佳数据容器?
我正在编写一个自定义三维模型导出/导入器,现在我正在为自定义文件类型编写导出器。基本上,格式由@symbol+a关键字组成,用于表示节,例如:C++11 适合我的要求的最佳数据容器?,c++11,C++11,我正在编写一个自定义三维模型导出/导入器,现在我正在为自定义文件类型编写导出器。基本上,格式由@symbol+a关键字组成,用于表示节,例如: @version(1.0) @name("test") @source("src/test.model") @mesh @vertices(v34,4,5512 v23,56,75) @indices(i0, 1, 2 i3, 4, 5) @end 我遇到的问题是如何为这个任务选择一个容器(vector、list、deque、map等)。以下
@version(1.0)
@name("test")
@source("src/test.model")
@mesh
@vertices(v34,4,5512 v23,56,75)
@indices(i0, 1, 2 i3, 4, 5)
@end
我遇到的问题是如何为这个任务选择一个容器(vector、list、deque、map等)。以下是我的说明书:
enum GlobalKeywords {
GK_FIRST = 0,
GK_VERSION = GK_FIRST,
GK_NAME,
// .... more here
GK_COUNT // Always last one
};
static char const * const GLOBAL_KEYWORD_STRINGS[GK_COUNT] = {
"version", "name" //...
};
enum ObjectKeywords {
OK_FIRST,
OK_MESH = OK_FIRST,
// .... more here
OK_COUNT // Always last one
};
static char const * const OBJECT_KEYWORD_STRINGS[OK_COUNT] = {
"mesh" //...
};
enum AttributeKeywords {
AK_FIRST = 0,
AK_VERTICES = AK_FIRST,
AK_INDICES,
//...
AK_COUNT
};
static char const * const ATTRIBUTE_KEYWORD_STRINGS[AK_COUNT] = {
"vertices", "indices" //...
};
enum class KeywordCategory {
KC_GLOBAL,
KC_OBJECT,
KC_ATTRIBUTE
};
类型std::无序映射代码>
插入:
for(std::uint32_t i = GK_FIRST; i < GK_COUNT; ++i)
{
mapping[GLOBAL_KEYWORD_STRINGS[i]] = std::make_pair(KC_GLOBAL, i);
}
for(unsigned i = OK_FIRST; i < OK_COUNT; ++i)
{
mapping[OBJECT_KEYWORD_STRINGS[i]] = std::make_pair(KC_OBJECT, i);
}
for(unsigned i = AK_FIRST; i < AK_COUNT; ++i)
{
mapping[ATTRIBUTE_KEYWORD_STRINGS[i]] = std::make_pair(KC_ATTRIBUTE, i);
}
for(std::uint32\u t i=GK\u优先;i
现在您有了一个带有O(1)查找的映射对象,它告诉您它是什么类别,以及作为数字表示的确切条目
HTH,看看这个,我想你可能有一些类/结构,它们代表网格,也代表顶点和索引。我将使用std::unordered_map
和boost::variant
作为值类型,并将std::string
作为键。但是如果没有自定义键,并且程序知道所有这些键,我甚至会将关键字映射到enum类
@Vinzenz:Correct。数据通过模型加载库收集并优化,然后写入该文件。编写此文件时,性能不是一个问题,因为它不是在运行时完成的。然而,加载这个文件是…所以我把它们都映射到它们自己的枚举类,还是同一个?在我“映射”它们之后我该怎么做?好的,我只是看到我误解了你需要容器的内容。我在看文件,以为你想把它画出来。我应该好好读一下这个问题,对不起。我希望我现在明白了。忘记我的第一句话;)我将发布一个例子。很有趣。我会在早上实施,谢谢!