使用 Qt 从 mysql 查询构造 2D 向量
Constructing a 2D vector from a mysql query using Qt
我有一个选择工具列表的查询语句。这些工具需要放置在 2D 矢量中,其中第一级是它的类别,第二级是类别的"桶"。
struct Tool {};
typedef boost::shared_ptr< Tool > ToolPtr;
typedef std::vector< ToolPtr > ToolVec;
typedef std::vector< ToolVec > ToolCategory;
查询语句如下所示:
const QString getTools =
"SELECT tool_id, category_id, category_name, tool_name FROM tool_relation "
"WHERE course_id = ? ORDER BY category_id ASC, tool_id ASC";
q.bindValue(0, courseID);
q.exec();
while (q.next())
{
}
我想用一个查询语句来做到这一点,但我能想到的唯一方法是使用指向正确存储桶的临时指针并测试每条记录以查看类别 ID 是否更改。似乎效率低下。
编辑:像这样的东西是我只使用一个查询语句时想到的。
ToolVector *curBucket = 0;
int curCategory = 0;
while (q.next())
{
if (q.value(1).toInt() != curCategory)
{
curCategory = q.value(1).toInt();
ToolVec toolVec;
curBucket = &toolVec;
categories.push_back(toolVec);
}
ToolPtr toolPtr(new Tool(
q.value(0).toInt(),
q.value(2).toString()));
curBucket->push_back(toolPtr);
}
我们在"效率"的定义上可能有所不同。对我来说,这是速度和内存要求。处理两个 SELECT 语句总是比处理一个语句更慢、更耗时,即使每个返回的行都有if
语句也是如此。
但是,即使我对你的逻辑一无所知,我也有点想念你如何寻找工具桶。 category_id
不会保存在任何地方,category_name
保存在Tool
结构中。除非迭代所有工具,否则无法找到存储桶。水桶map
呢?它还可能满足您的效率要求:
typedef std::map< int, ToolVec > ToolCategory;
while (q.next())
{
curCategory = q.value(1).toInt();
...
categories[curCategory].push_back(toolPtr);
}
相关文章:
- 在 2D 向量中使用第三个 [ ] 有什么意义?
- 如何在 C++ 中使用它的构造函数初始化 unique_ptrs 的 2D 向量?
- 哪个更快:在 1d 向量中按字符串搜索还是在 2d 向量中按向量搜索?
- 分配具有 2D 向量大小的变量的内存
- 在统一内存 CUDA C/C++ 中分配 2D 向量
- 索引 2D 向量时'Reference to type const..'编译错误
- 查找 2D 向量的位置,该向量是类C++的一个元素
- 如何在 C++ 中的函数中传递 2D 向量的子向量
- 为 2D 向量类创建标量乘法运算符
- 无法使用push_back将整数插入1D/2D向量
- 如何将列附加到现代C 中的2D向量
- parallel_for lambda 函数填充 2D 向量后出错
- 类对象指针C 的2D向量
- 将1D或2D向量传递给同一类的构造函数
- 如何初始化2D向量C
- 在类的构造函数中初始化 2D 向量
- 对通过引用传递的 2d 向量进行排序
- 如何在C 2D向量中找到对象(而不是int)的位置
- 如何在C 中打印一个对象的2D向量
- 双打分类/编辑问题的2D向量