解析整数列表以进行向量、映射或多映射
parsing lists of integers to vector or map or multimap?
我有一个以下格式的列表:
2323 0 1212
2424 0 1313
2525 1 1414
我需要存储这些值的每一行,我需要能够单独访问它们中的每一个,并能够搜索存储在我使用的任何数字中的任何数字的出现。
我能用什么?我应该使用多个向量吗?还是可以将它们存储在多映射或boost::元组中?
我不能使用c++11,我只有有限的增强支持(1.36已安装,我无法更新)。
我已经有了一个解析器,可以解析列表(在那里找到):http://en.highscore.de/cpp/boost/parser.html
提前感谢
如果我正确理解你的问题,你可以定义一个结构(从你的评论中取名字):
struct Item
{
int position;
int direction;
int nextPosition;
};
然后只需要一个std::vector<Item>
。该行将是索引。要计算值的出现次数,可以将自定义谓词传递给std::count
,也可以定义自己的函数来执行此操作,因为我认为在没有C++11 lambdas的情况下使用std::count可能有点困难。
编辑:为了让事情变得更容易,正如Thomas Matthews所建议的,你可以重载运算符>>,让你的结构直接从文件中读取:
struct Item
{
int position;
int direction;
int nextPosition;
friend std::istream& operator>>(std::istream& stream, Item& item);
};
std::ifstream& operator>>(std::ifstream& stream, Item& item)
{
stream >> item.position >> item.direction >> item.nextPosition;
return stream;
}
这取决于你想用它做什么。一个向量的向量可以访问所有的数字,并将它们逐行保存。这也将保留行中数字的顺序。您可以通过遍历矢量来查找数字(或使用STL查找函数来查找相同的数字)
如果需要插入或删除行/数字,可以考虑使用列表而不是矢量。列表在插入/删除方面具有更好的性能,但您将失去随机访问权限。
如果你只需要知道是否存在特定的数字,那么你可以把它们放在一个多集合中。你将失去知道数字在哪一行的能力,也失去了数字在各行中的顺序。
简单地将数字一个接一个地放入std::vector
中可能是最快的(尽管我还没有测试过),完全忽略行结构,只需在整个过程中逐步检测索引i
处的匹配。然后,您可以将带有一些索引争论的行作为( i % 3 ) + {0|1|2}
。
如果可以安全地假设每行总是有3列,那么使用std::vector<int>
。然后,当你想知道数字来源的行/列时,你可以使用这样的函数:
bool find( const std::vector<int>& numbers, int target, int& row, int& column )
{
std::vector<int>::iterator it = std::find( numbers.begin(), numbers.end(), target );
if( it == numbers.end() )
{
return false;
}
int index = it - numbers.begin();
row = index / 3;
column = index % 3;
return true;
}
// Example:
std::vector<int> numbers = ...
int row, column;
if( find( numbers, 10, row, column ) )
{
std::cout << "Found at row " << row << ", column " << column << std::endl;
}
else
{
std::cout << "Not found" << std::endl;
}
- 如何在 c++ 中创建结构向量的映射
- 在C++中初始化向量映射的最有效方法
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 字符串共享内存映射的向量
- 具有 2 个分量的数组的特征映射到 3 的向量
- 当键值是 std 向量时,为什么使用 at in C++ 访问映射值如此缓慢?
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 如何初始化 std::向量的映射?
- 访问映射中的分区向量
- 如何将整数向量插入到键中,标准::映射的值
- 将一个向量映射到不同的对,即使向量映射到每对时是不同的?
- 如何从向量映射中迭代向量
- 访问映射向量的映射元素(c++)
- 映射向量的时间复杂性是多少
- C++:通过从映射向量分配映射实例来填充映射的映射
- 在一个映射向量上迭代,如果满足条件,则插入一个副本
- 如何在映射向量中循环访问地图
- 丢弃限定符 访问类中的映射向量时出错
- 从常量迭代器到映射向量,获取映射向量中映射元素的键和值
- 映射向量c++