- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用 QHash 作为容器,我有一个任务是删除所有满足谓词的项目。起初我想使用 Erase-remove idiom事实证明,QHash 没有删除范围的选项,只有一个 function。通过迭代器删除单个元素。
std::unordered_map(概念上接近于 Qt 的 QHash)具有 function删除范围。
这意味着一个问题:为什么 QHash 没有类似的功能以及如何以最佳方式从 QHash 中删除满足谓词的项目?
最佳答案
根据评论,原来erase-remove idiom 不适用于QHash 容器。
因此,鉴于 QHash::erase 的描述,特别是它不违反散列中项目的顺序
Unlike remove() and take(), this function never causes QHash to rehash its internal data structure. This means that it can safely be called while iterating, and won't affect the order of items in the hash.
我们有以下代码来删除满足谓词的元素:
for( auto it = hash.begin(); it != hash.end(); )
{
if( pred(*it) )
{
it = hash.erase(it);
} else {
++it;
}
}
关于c++ - 从 QHash 中删除元素范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25761225/
在我的项目中,我需要几个常量哈希容器,它们在类和函数之外定义,因此是全局的。这样,其中一些容器应该重叠。对于列表,我将执行以下操作以将第二个 const 列表与第一个 const 列表组合: cons
我正在使用 QT 4.8,我注意到它有一个 QHash 类,可以按如下方式使用: QHash hash; hash["one"] = 1; hash["three"] = 3; has
我想从我的 QHash 中得到一个随机对,数字为 n。 现在我这样做: QHash::iterator iterator = dictionary.begin(); iterator+= n; que
我有一个 QHash ,而 MyClass 只是一些带有 getter 和 setter 的 QString quint8 值的集合。 MyClass 还有一个 QDataStream &operat
我一直在尝试并试图让它工作,但它就是拒绝工作。我阅读了 QT 文档,但无法使插入功能发挥作用。构建时出现以下复杂错误 /home/mmanley/projects/StreamDesk/libstre
我需要一个 QHash 容器,它采用 quint8 键,但采用异构类型作为值,所有这些都将是 Qt 容器或类。例如,我可能想插入一个 QDate 或 QTime 对象,甚至 quint8 作为值。 如
是否可以按插入顺序循环 QHash?下面的方法似乎通过一些其他因素循环散列: QHashIterator i(hash); while (i.hasNext()) { i.next();
我是 Qt 的新手,正在学习处理 QHash 的工作原理。在处理这个例子时,我不明白为什么这会给我一个错误。我可能会遗漏一些东西,但请指导我学习这一点。 主要.cpp int main(int arg
我试图找到实现使用多个键返回一个值的类似 QHash 的查找表的最佳方法。我已经读到 Boost 库具有类似的功能,但如果可能,我想避免这种情况。 我想做的一个例子如下(显然下面的伪代码是不可能的):
我想存储从一个类继承的 QHash 元素。所以我有: class ImageInterface { public: ImageInterface(); ImageInterface(c
我想使用 QSet自定义对象。从文档中,我发现: QSet's value data type must be an assignable data type. You cannot, for exa
我有一个QHash > qhash ,并尝试覆盖 QVector 中的值如下: void Coordinate::normalizeHashElements(QHash > qhash) {
我有一个服务器类,它处理 QJsonObject 数据并根据数据中设置的键来处理它。 目前,我使用一个很大的 if-then-else 语句来决定要做什么: const QString action
我有我的代码: for(QHash::iterator i=list.begin();i!=list.end();++i) { long id = QVariant((*i).key()).t
我正在尝试使用 QMutableHashIterator 遍历 QHash 并找到所有重复值,然后将每个重复值的键添加到 QStringList。我以前从未使用过 QHash,也不确定具体如何去做。在
我使用 QHash 作为容器,我有一个任务是删除所有满足谓词的项目。起初我想使用 Erase-remove idiom事实证明,QHash 没有删除范围的选项,只有一个 function。通过迭代器删
我在 C++ 中使用 QHash 来存储一些简单的键值对。在我的例子中,键是一个整数,值也是。要向散列添加新的键/值对,这是我的语法: QHash myhash; int key = 5; int v
我想创建一个 QSet我想在我的程序中使用。 Tag是我的自定义类。 当我构建代码时,我得到关于 qHash 的 gcc 错误重载: Exercise.cpp.o In file included f
我想创建一个带有 QVariants 键的数据结构。它看起来像这样: QHash, SHAPES::Shape* > _shapes; 不幸的是,“没有匹配的函数来调用‘qHash(const QVa
假设一个程序以相同的方式运行多次。在每次运行中,相同的一组对象以相同的插入顺序插入到 QHash 中;然后迭代 QHash 中的对象。问题是在程序的每次运行中对象是否会以相同的顺序迭代? 最佳答案 可
我是一名优秀的程序员,十分优秀!