QMultiMap Class

template <typename Key, typename T> class QMultiMap

QMultiMapクラスは、等価な複数のキーを持つ連想配列を提供するテンプレート・クラスです。詳細...

ヘッダー #include <QMultiMap>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

注意:このクラスの関数はすべてリエントラントです。

パブリック型

パブリック関数

QMultiMap()
(since 6.0) QMultiMap(QMap<Key, T> &&other)
(since 6.0) QMultiMap(const QMap<Key, T> &other)
QMultiMap(const std::multimap<Key, T> &other)
QMultiMap(std::initializer_list<std::pair<Key, T>> list)
QMultiMap(std::multimap<Key, T> &&other)
QMultiMap(const QMultiMap<Key, T> &other)
QMultiMap(QMultiMap<Key, T> &&other)
~QMultiMap()
(since 6.4) auto asKeyValueRange() &&
(since 6.4) auto asKeyValueRange() &
(since 6.4) auto asKeyValueRange() const &&
(since 6.4) auto asKeyValueRange() const &
QMultiMap<Key, T>::iterator begin()
QMultiMap<Key, T>::const_iterator begin() const
QMultiMap<Key, T>::const_iterator cbegin() const
QMultiMap<Key, T>::const_iterator cend() const
void clear()
QMultiMap<Key, T>::const_iterator constBegin() const
QMultiMap<Key, T>::const_iterator constEnd() const
QMultiMap<Key, T>::const_iterator constFind(const Key &key) const
QMultiMap<Key, T>::const_iterator constFind(const Key &key, const T &value) const
QMultiMap<Key, T>::const_key_value_iterator constKeyValueBegin() const
QMultiMap<Key, T>::const_key_value_iterator constKeyValueEnd() const
bool contains(const Key &key) const
bool contains(const Key &key, const T &value) const
QMultiMap<Key, T>::size_type count(const Key &key) const
QMultiMap<Key, T>::size_type count(const Key &key, const T &value) const
QMultiMap<Key, T>::size_type count() const
bool empty() const
QMultiMap<Key, T>::iterator end()
QMultiMap<Key, T>::const_iterator end() const
std::pair<QMultiMap<Key, T>::iterator, QMultiMap<Key, T>::iterator> equal_range(const Key &key)
std::pair<QMultiMap<Key, T>::const_iterator, QMultiMap<Key, T>::const_iterator> equal_range(const Key &key) const
QMultiMap<Key, T>::iterator erase(QMultiMap<Key, T>::const_iterator pos)
(since 6.0) QMultiMap<Key, T>::iterator erase(QMultiMap<Key, T>::const_iterator first, QMultiMap<Key, T>::const_iterator last)
QMultiMap<Key, T>::iterator find(const Key &key)
QMultiMap<Key, T>::const_iterator find(const Key &key) const
QMultiMap<Key, T>::const_iterator find(const Key &key, const T &value) const
T &first()
const T &first() const
const Key &firstKey() const
QMultiMap<Key, T>::iterator insert(const Key &key, const T &value)
QMultiMap<Key, T>::iterator insert(QMultiMap<Key, T>::const_iterator pos, const Key &key, const T &value)
bool isEmpty() const
Key key(const T &value, const Key &defaultKey = Key()) const
QMultiMap<Key, T>::key_iterator keyBegin() const
QMultiMap<Key, T>::key_iterator keyEnd() const
QMultiMap<Key, T>::key_value_iterator keyValueBegin()
QMultiMap<Key, T>::const_key_value_iterator keyValueBegin() const
QMultiMap<Key, T>::key_value_iterator keyValueEnd()
QMultiMap<Key, T>::const_key_value_iterator keyValueEnd() const
QList<Key> keys() const
QList<Key> keys(const T &value) const
T &last()
const T &last() const
const Key &lastKey() const
QMultiMap<Key, T>::iterator lowerBound(const Key &key)
QMultiMap<Key, T>::const_iterator lowerBound(const Key &key) const
QMultiMap<Key, T>::size_type remove(const Key &key)
QMultiMap<Key, T>::size_type remove(const Key &key, const T &value)
(since 6.1) QMultiMap<Key, T>::size_type removeIf(Predicate pred)
QMultiMap<Key, T>::iterator replace(const Key &key, const T &value)
QMultiMap<Key, T>::size_type size() const
void swap(QMultiMap<Key, T> &other)
T take(const Key &key)
std::multimap<Key, T> toStdMultiMap() const &
QList<Key> uniqueKeys() const
QMultiMap<Key, T> &unite(QMultiMap<Key, T> &&other)
QMultiMap<Key, T> &unite(const QMultiMap<Key, T> &other)
QMultiMap<Key, T>::iterator upperBound(const Key &key)
QMultiMap<Key, T>::const_iterator upperBound(const Key &key) const
T value(const Key &key, const T &defaultValue = T()) const
QList<T> values() const
QList<T> values(const Key &key) const
QMultiMap<Key, T> &operator=(QMultiMap<Key, T> &&other)
QMultiMap<Key, T> &operator=(const QMultiMap<Key, T> &other)
(since 6.1) qsizetype erase_if(QMultiMap<Key, T> &map, Predicate pred)
bool operator!=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QMultiMap<Key, T> operator+(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QMultiMap<Key, T> operator+=(QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QDataStream &operator<<(QDataStream &out, const QMultiMap<Key, T> &map)
bool operator==(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QDataStream &operator>>(QDataStream &in, QMultiMap<Key, T> &map)

詳細な説明

QMultiMap<Key, T> は Qt の汎用コンテナクラスの一つです。キーと値の)ペアを格納し、キーによる高速な検索を提供します。

QMultiMap とQMultiHash は非常によく似た機能を提供します。違いは

  • QMultiHash QMultiMapはQMultiMapよりも平均的に高速な検索を提供します。(詳細はアルゴリズム複雑度を参照)。
  • QMultiHash を反復処理する場合、項目は任意に並べられる。QMultiMapでは、項目は常にキーでソートされる。
  • QMultiHash のキー・タイプは、operator==() とグローバルなqHash(Key) 関数を提供しなければならない。QMultiMap のキー・タイプは、総順序を指定する operator<() を提供しなければなりません。Qt 5.8.1以降では、ポインタ型をキーとして使用することも安全になりました。

以下は、QString キーとint 値を持つ QMultiMap の例です:

QMultiMap<QString, int> multimap;

キーと値の)ペアをマルチマップに挿入するには、insert() を使用します:

multimap.insert("a", 1);
multimap.insert("b", 3);
multimap.insert("c", 7);
multimap.insert("c", -5);

これは、QMultiMapに以下の3つの(キー、値)ペアを挿入します:("a", "1")、("b", "3")、("c", "7")、("c","-5"); キーの重複は許されることに注意。

値の検索には、find ()またはvalue ()を使用する:

int num2 = multimap.value("a"); // 1
int num3 = multimap.value("thirteen"); // not found; 0
int num3 = 0;
auto it = multimap.constFind("b");
if (it != multimap.cend()) {
    num3 = it.value();
}

指定されたキーを持つ項目がマップにない場合、これらの関数はデフォルトの値を返す。

マップに特定のキーが含まれているかどうかを調べたい場合は、contains() を使用する:

int timeout = 30;
if (multimap.contains("TIMEOUT"))
    timeout = multimap.value("TIMEOUT");

// better:
auto it = multimap.find("TIMEOUT");
if (it != multimap.end())
    timeout = it.value();

また、value ()のオーバーロードもあり、指定されたキーを持つ項目がない場合、第2引数をデフォルト値として使用します:

int timeout = multimap.value("TIMEOUT", 30);

QMultiMap に格納されているすべての (key, value) ペアをナビゲートしたい場合は、イテレータを使用できます。QMultiMap には、Java スタイルのイテレータ(QMultiMapIteratorQMutableMultiMapIterator) とSTL スタイルのイテレータ(QMultiMap::const_iteratorQMultiMap::iterator) の両方が用意されています。以下は、Javaスタイルのイテレータを使用してQMultiMap<QString, int>を反復処理する方法です:

QMultiMapIterator<QString, int> i(multimap);
while (i.hasNext()) {
    i.next();
    cout << qPrintable(i.key()) << ": " << i.value() << endl;
}

以下は同じコードだが、今回はSTLスタイルのイテレータを使用している:

for (auto i = multimap.cbegin(), end = multimap.cend(); i != end; ++i)
    cout << qPrintable(i.key()) << ": " << i.value() << endl;

項目はキーの昇順で走査される。

QMultiMapでは、キーごとに複数の値を指定できます。マップに既に存在するキーで insert() を呼び出すと、新しい (key, value) ペアが挿入されます。例えば、以下のようになります:

multimap.insert("plenty", 100);
multimap.insert("plenty", 2000);
// multimap.size() == 2

ひとつのキーに対するすべての値を取得したい場合は、values(const Key &key)を使用します。QList<T>を返します:

QList<int> values = multimap.values("plenty");
for (auto i : std::as_const(values))
    cout << i << endl;

同じキーを共有する項目は、最近挿入されたものから最近挿入されなかったものまで利用できます。もう1つの方法は、find ()を呼び出して、キーを持つ最初のアイテムのSTLスタイルのイテレータを取得し、そこから反復処理することです:

auto i = multimap.find("plenty");
while (i != map.end() && i.key() == "plenty") {
    cout << i.value() << endl;
    ++i;
}

// better:
auto [i, end] = multimap.equal_range("plenty");
while (i != end) {
    cout << i.value() << endl;
    ++i;
}

キーではなく)マップから値だけを取り出す必要がある場合は、範囲ベースのforを使うこともできる:

QMap<QString, int> multimap;
...
for (int value : std::as_const(multimap))
    cout << value << endl;

マルチマップから項目を削除するには、いくつかの方法があります。ひとつは、remove() を呼び出す方法である。これは、指定されたキーを持つ項目をすべて削除する。もうひとつの方法は、QMutableMultiMapIterator::remove ()を使うことである。さらに、clear() を使用して、マップ全体を消去することもできる。

unite ()、operator+()、 operator+=()を使用して、2つのマルチマップをマージすることができる。例

QMultiMap<QString, int> map1, map2, map3;

map1.insert("plenty", 100);
map1.insert("plenty", 2000);
// map1.size() == 2

map2.insert("plenty", 5000);
// map2.size() == 1

map3 = map1 + map2;
// map3.size() == 3

QMultiMapのキーと値のデータ型は、代入可能なデータ型でなければなりません。これは、あなたが遭遇する可能性のあるほとんどのデータ型をカバーしていますが、コンパイラは、例えば、値としてQWidget 。代わりに、QWidget *を格納することはできません。さらに、QMultiMapのキー・タイプはoperator<()を提供しなければならない。QMap は、アイテムのソートを維持するためにこれを使用し、x < yy < x のどちらも真でない場合、2つのキーxy は等しいと仮定する。

#ifndef EMPLOYEE_H
#define EMPLOYEE_H

class Employee
{
public:
    Employee() {}
    Employee(const QString &name, QDate dateOfBirth);
    ...

private:
    QString myName;
    QDate myDateOfBirth;
};

inline bool operator<(const Employee &e1, const Employee &e2)
{
    if (e1.name() != e2.name())
        return e1.name() < e2.name();
    return e1.dateOfBirth() < e2.dateOfBirth();
}

#endif // EMPLOYEE_H

この例では、まず従業員の名前を比較します。もし同じなら、生年月日を比較し、同数を解消する。

QMultiMapIteratorQMutableMultiMapIteratorQMultiHashも参照のこと

メンバ型ドキュメント

QMultiMap::ConstIterator

Qt-style synonym forQMultiMap::const_iterator.

QMultiMap::Iterator

Qt-style synonym forQMultiMap::iterator.

QMultiMap::const_key_value_iterator

QMultiMap::const_key_value_iterator typedef は、QMultiMap に対する STL スタイルのイテレータを提供する。

QMultiMap::const_key_value_iterator は基本的にQMultiMap::const_iterator と同じですが、 operator*() が値の代わりにキーと値のペアを返す点が異なります。

QKeyValueIteratorも参照してください

[alias] QMultiMap::difference_type

ptrdiff_tの型定義。STL との互換性のために提供される。

[alias] QMultiMap::key_type

Keyの型定義。STL との互換性のために提供される。

QMultiMap::key_value_iterator

QMultiMap::key_value_iterator typedef は、QMultiMap に対する STL スタイルのイテレータを提供する。

QMultiMap::key_value_iterator はQMultiMap::iterator と本質的に同じですが、 operator*() が値の代わりに key/value ペアを返す点が異なります。

QKeyValueIteratorも参照してください

[alias] QMultiMap::mapped_type

STL との互換性のために提供される。

[alias] QMultiMap::size_type

int の型定義。STL との互換性のために提供される。

メンバ関数ドキュメント

[since 6.4] auto QMultiMap::asKeyValueRange() &

[since 6.4] auto QMultiMap::asKeyValueRange() &&

[since 6.4] auto QMultiMap::asKeyValueRange() const &

[since 6.4] auto QMultiMap::asKeyValueRange() const &&

このマルチマップをキーと値のペアで反復処理できる範囲オブジェクトを返します。例えば、この範囲オブジェクトは、構造化バインディング宣言と組み合わせて、範囲ベースのforループで使用することができます:

QMultiMap<QString, int> map;
map.insert("January", 1);
map.insert("February", 2);
// ...
map.insert("December", 12);

for (auto [key, value] : map.asKeyValueRange()) {
    cout << qPrintable(key) << ": " << value << endl;
    --value; // convert to JS month indexing
}

このようにして得られるキーと値は、どちらもマルチマップ内のものへの参照であることに注意してください。具体的には、値を変更するとマップ自体が変更されます。

この関数はQt 6.4で導入されました。

QKeyValueIteratorも参照して ください。

QMultiMap::QMultiMap()

空のマルチマップを構築する。

clear()も参照してください

[explicit, since 6.0] QMultiMap::QMultiMap(QMap<Key, T> &&other)

other が共有されている場合、other のコピーとしてマルチマップを構築します。そうでない場合、other から要素を移動してマルチマップを構築します。

この関数は Qt 6.0 で導入されました。

[explicit, since 6.0] QMultiMap::QMultiMap(const QMap<Key, T> &other)

other のコピーとしてマルチマップを構築します。

この関数は Qt 6.0 で導入されました。

[explicit] QMultiMap::QMultiMap(const std::multimap<Key, T> &other)

other のコピーを構築する。

toStdMultiMap()も参照

QMultiMap::QMultiMap(std::initializer_list<std::pair<Key, T>> list)

イニシャライザーリストlist の各要素のコピーを持つマルチマップを構築する。

[explicit] QMultiMap::QMultiMap(std::multimap<Key, T> &&other)

other から移動してマルチマップを構築する。

toStdMultiMap()も参照のこと

[default] QMultiMap::QMultiMap(const QMultiMap<Key, T> &other)

other のコピーを構築する。

QMultiMap は暗黙的に共有されるため、この操作は一定時間で行われる。これにより、関数から QMultiMap を返すのが非常に高速になります。共有インスタンスが変更された場合、そのインスタンスはコピーされます(コピーオンライト)。

operator=()も参照してください

[default] QMultiMap::QMultiMap(QMultiMap<Key, T> &&other)

Move-QMultiMapインスタンスを構築し、other が指していたのと同じオブジェクトを指すようにする。

[default] QMultiMap::~QMultiMap()

マルチマップを破棄する。マルチマップ内の値への参照、およびこのマルチマップに対するすべてのイテレータは無効になる。

QMultiMap<Key, T>::iterator QMultiMap::begin()

マルチマップの最初の項目を指すSTL 形式のイテレータを返します。

constBegin() およびend()も参照

QMultiMap<Key, T>::const_iterator QMultiMap::begin() const

これはオーバーロードされた関数である。

QMultiMap<Key, T>::const_iterator QMultiMap::cbegin() const

マルチマップの最初の項目を指すSTL 形式のイテレータを返します。

begin() およびcend()も参照してください

QMultiMap<Key, T>::const_iterator QMultiMap::cend() const

マルチマップの最後のアイテムの後の虚数アイテムを指すSTL 形式のイテレータを返します。

cbegin() およびend()も参照してください

void QMultiMap::clear()

マルチマップからすべてのアイテムを削除する。

remove()も参照してください

QMultiMap<Key, T>::const_iterator QMultiMap::constBegin() const

マルチマップの最初の項目を指すSTL 形式のイテレータを返します。

begin() およびconstEnd()も参照してください

QMultiMap<Key, T>::const_iterator QMultiMap::constEnd() const

マルチマップの最後のアイテムの後の虚数アイテムを指すSTL 形式のイテレータを返します。

constBegin() およびend()も参照してください

QMultiMap<Key, T>::const_iterator QMultiMap::constFind(const Key &key) const

マルチマップ内のキーkey を持つ項目を指す const イテレータを返す。

マルチマップにキーkey を持つ項目がない場合、この関数はconstEnd() を返します。

find() および QMultiMap::constFind()も参照してください

QMultiMap<Key, T>::const_iterator QMultiMap::constFind(const Key &key, const T &value) const

マップ内のキーがkey で値がvalue の項目を指すイテレータを返す。

マップにそのような項目がない場合、この関数はconstEnd() を返します。

QMap::constFind()も参照

QMultiMap<Key, T>::const_key_value_iterator QMultiMap::constKeyValueBegin() const

マルチマップの最初のエントリを指すSTL 形式のイテレータを返します。

keyValueBegin()も参照してください

QMultiMap<Key, T>::const_key_value_iterator QMultiMap::constKeyValueEnd() const

マルチマップの最後のエントリの後の虚数エントリを指す、STL 形式のイテレータを返します。

constKeyValueBegin()も参照してください

bool QMultiMap::contains(const Key &key) const

マルチマップがキーkey を持つアイテムを含む場合はtrue を返し、そうでない場合はfalse を返す。

count()も参照のこと

bool QMultiMap::contains(const Key &key, const T &value) const

マルチマップにキーがkey で値がvalue の項目が含まれていればtrue を返し、そうでなければfalse を返す。

count()も参照

QMultiMap<Key, T>::size_type QMultiMap::count(const Key &key) const

キーkey に関連付けられた項目の数を返す。

contains() およびQMultiMap::count()も参照

QMultiMap<Key, T>::size_type QMultiMap::count(const Key &key, const T &value) const

キーがkey で値がvalue の項目の数を返します。

contains() およびQMultiMap::count()も参照

QMultiMap<Key, T>::size_type QMultiMap::count() const

これはオーバーロードされた関数である。

size() と同じ。

bool QMultiMap::empty() const

この関数は STL との互換性のために用意されている。これはisEmpty() と等価であり、マップが空であれば真を返し、そうでなければ偽を返す。

QMultiMap<Key, T>::iterator QMultiMap::end()

STL 形式のイテレータを返します。

begin() およびconstEnd()も参照

QMultiMap<Key, T>::const_iterator QMultiMap::end() const

これはオーバーロードされた関数である。

std::pair<QMultiMap<Key, T>::iterator, QMultiMap<Key, T>::iterator> QMultiMap::equal_range(const Key &key)

key の下に格納されている値[first, second) の範囲を区切るイテレータのペアを返す。

std::pair<QMultiMap<Key, T>::const_iterator, QMultiMap<Key, T>::const_iterator> QMultiMap::equal_range(const Key &key) const

これはオーバーロードされた関数である。

QMultiMap<Key, T>::iterator QMultiMap::erase(QMultiMap<Key, T>::const_iterator pos)

マルチマップからイテレータpos が指す (key, value) ペアを削除し、マップ内の次の項目へのイテレータを返します。

注意: イテレータpos は有効で再参照可能でなければなりません。

remove()も参照

[since 6.0] QMultiMap<Key, T>::iterator QMultiMap::erase(QMultiMap<Key, T>::const_iterator first, QMultiMap<Key, T>::const_iterator last)

マルチマップから、イテレータ範囲 [first,last) が指す (key, value) ペアを削除します。最後に削除された要素に続くマルチマップ内の項目へのイテレータを返します。

注意: 範囲[first, last) は、*this で有効な範囲でなければなりません

この関数は Qt 6.0 で導入されました。

remove()も参照してください

QMultiMap<Key, T>::iterator QMultiMap::find(const Key &key)

マルチマップ内のキーkey を持つ項目を指すイテレータを返す。

マルチマップにキーkey を持つ項目がない場合、この関数はend() を返す。

マップにキーkey を持つ複数の項目が含まれる場合、この関数は、最近挿入された値を指すイテレータを返します。他の値には、イテレータをインクリメントすることでアクセスできます。たとえば、同じキーを持つすべての項目を反復処理するコードを以下に示します:

auto i = multimap.find("plenty");
while (i != map.end() && i.key() == "plenty") {
    cout << i.value() << endl;
    ++i;
}

// better:
auto [i, end] = multimap.equal_range("plenty");
while (i != end) {
    cout << i.value() << endl;
    ++i;
}

constFind()、value()、values()、lowerBound()、upperBound()も参照の こと。

QMultiMap<Key, T>::const_iterator QMultiMap::find(const Key &key) const

これはオーバーロードされた関数である。

QMultiMap<Key, T>::const_iterator QMultiMap::find(const Key &key, const T &value) const

これはオーバーロードされた関数である。

マップ内の指定されたkeyvalue を持つ項目を指すイテレータを返します。

マップにそのような項目がない場合、この関数はend() を返します。

マップに指定されたkey を持つ複数の項目が含まれる場合、この関数は、最近挿入された値を指す const イテレータを返します。

T &QMultiMap::first()

マルチマップの最初の値、つまり最小のキーにマップされた値への参照を返す。この関数は、マルチマップが空でないことを前提としている。

非共有(またはconstバージョンが呼び出される)の場合、これは定数時間で実行される。

last(),firstKey(),isEmpty()も参照のこと

const T &QMultiMap::first() const

これはオーバーロードされた関数である。

const Key &QMultiMap::firstKey() const

マルチマップ内の最小のキーへの参照を返す。この関数は、マルチマップが空でないことを前提とする。

この関数は定数時間で実行される。

lastKey()、first()、keyBegin()、isEmpty()も参照

QMultiMap<Key, T>::iterator QMultiMap::insert(const Key &key, const T &value)

キーがkey で値がvalue の新しい項目を挿入します。

マップ内に同じキーの項目が既にある場合、この関数は単に新しい項目を作成します。(この動作は、既存の項目の値を上書きするreplace() とは異なります)。

新しい要素を指すイテレータを返します。

replace()も参照

QMultiMap<Key, T>::iterator QMultiMap::insert(QMultiMap<Key, T>::const_iterator pos, const Key &key, const T &value)

これはオーバーロードされた関数である。

キーがkey で値がvalue の新しいアイテムを挿入し、ヒントはpos で挿入先を示唆します。

ヒントとしてconstBegin() が使われた場合、key がマルチマップのどのキーよりも小さいことを示し、constEnd() が使われた場合、key がマルチマップのどのキーよりも(厳密には)大きいことを示す。そうでない場合、ヒントは(pos - 1).key() <key <= pos.key()の条件を満たすべきである。ヒントpos が間違っている場合、それは無視され、通常の挿入が行われる。

ヒントが正しく、マルチマップが非共有であれば、挿入は償却された定数時間で実行される。

マップ内に同じキーを持つ項目が既に存在する場合、この関数は単に新しい項目を作成します。

ソートされたデータからマルチマップを作成する場合、constEnd() でソート順に挿入するよりも、constBegin() で最大のキーを最初に挿入する方が高速である。なぜなら、constEnd() - 1(ヒントが有効かどうかをチェックするために必要)は対数時間を必要とするからである。

新しい要素を指すイテレータを返します。

注意:ヒントの取り扱いには注意してください。古い共有インスタンスからイテレータを提供するとクラッシュする可能性がありますが、マルチマップとpos マルチマップの両方が静かに破損する危険性もあります。

bool QMultiMap::isEmpty() const

マルチマップに項目がない場合はtrue を返し、そうでない場合は false を返す。

size()も参照してください

Key QMultiMap::key(const T &value, const Key &defaultKey = Key()) const

これはオーバーロードされた関数である。

value を持つ最初のキー、またはマルチマップに値value を持つ項目がない場合はdefaultKey を返します。defaultKey が指定されない場合、この関数はデフォルトで構成されたキーを返す。

QMultiMap の内部データ構造は、値ではなくキーで高速に検索できるように最適化されているため、この関数は遅い(線形時間)場合がある。

value() およびkeys()も参照のこと

QMultiMap<Key, T>::key_iterator QMultiMap::keyBegin() const

マルチマップの最初のキーを指すSTL 形式のイテレータを返します。

keyEnd() およびfirstKey()も参照してください

QMultiMap<Key, T>::key_iterator QMultiMap::keyEnd() const

マルチマップの最後のキーの後にある架空の項目を指すSTL 形式のイテレータを返します。

keyBegin() およびlastKey()も参照してください

QMultiMap<Key, T>::key_value_iterator QMultiMap::keyValueBegin()

マルチマップの最初のエントリを指すSTL 形式のイテレータを返します。

keyValueEnd()も参照してください

QMultiMap<Key, T>::const_key_value_iterator QMultiMap::keyValueBegin() const

マルチマップの最初のエントリを指す、STL 形式のイテレータを返します。

keyValueEnd()も参照してください

QMultiMap<Key, T>::key_value_iterator QMultiMap::keyValueEnd()

マルチマップの最後のエントリの後の虚数エントリを指すSTL 形式のイテレータを返します。

keyValueBegin()も参照ください

QMultiMap<Key, T>::const_key_value_iterator QMultiMap::keyValueEnd() const

マルチマップの最後のエントリの後の虚数エントリを指す、STL 形式のイテレータを返します。

keyValueBegin()も参照してください

QList<Key> QMultiMap::keys() const

マルチマップ内のすべてのキーを昇順に並べたリストを返す。マルチマップ内で複数回出現するキーは、リスト内でも複数回出現する。

この順序は、values() で使用される順序と同じであることが保証される。

この関数は、線形時間で新しいリストを作成する。keyBegin() からkeyEnd() へと繰り返し実行することで、時間とメモリの浪費を避けることができる。

values() およびkey()も参照の こと。

QList<Key> QMultiMap::keys(const T &value) const

これはオーバーロードされた関数である。

value に関連付けられたすべてのキーを昇順に含むリストを返す。

QMultiMap の内部データ構造は、値ではなくキーによる高速検索に最適化されているため、この関数は遅い(線形時間)ことがあります。

T &QMultiMap::last()

マルチマップの最後の値、つまり最大のキーにマップされた値への参照を返す。この関数は、マップが空でないことを前提とする。

非共有(または const バージョンが呼び出された)場合、これは対数時間で実行される。

first()、lastKey()、isEmpty()も参照のこと

const T &QMultiMap::last() const

これはオーバーロードされた関数である。

const Key &QMultiMap::lastKey() const

マルチマップ内の最大のキーへの参照を返す。この関数は、マルチマップが空でないことを前提とする。

この関数は対数時間で実行される。

firstKey()、last()、keyEnd()、isEmpty()も参照

QMultiMap<Key, T>::iterator QMultiMap::lowerBound(const Key &key)

マップ内のキーkey を持つ最初の項目を指すイテレータを返す。マップにキーkey を持つ項目がない場合、この関数は、より大きなキーを持つ最も近い項目を指すイテレータを返します。

QMultiMap<int, QString> multimap;
multimap.insert(1, "one");
multimap.insert(5, "five");
multimap.insert(5, "five (2)");
multimap.insert(10, "ten");

multimap.lowerBound(0);      // returns iterator to (1, "one")
multimap.lowerBound(1);      // returns iterator to (1, "one")
multimap.lowerBound(2);      // returns iterator to (5, "five")
multimap.lowerBound(5);      // returns iterator to (5, "five")
multimap.lowerBound(6);      // returns iterator to (10, "ten")
multimap.lowerBound(10);     // returns iterator to (10, "ten")
multimap.lowerBound(999);    // returns end()

例: マップにキーkey を持つ複数の項目が含まれる場合、この関数は、最近挿入された値を指すイテレータを返します。他の値には、イテレータをインクリメントすることでアクセスできます。たとえば、同じキーを持つすべての項目を反復処理するコードを以下に示します:

QMap<QString, int> multimap;
...
QMap<QString, int>::const_iterator i = multimap.lowerBound("HDR");
QMap<QString, int>::const_iterator upperBound = multimap.upperBound("HDR");
while (i != upperBound) {
    cout << i.value() << endl;
    ++i;
}

upperBound() およびfind()も参照

QMultiMap<Key, T>::const_iterator QMultiMap::lowerBound(const Key &key) const

これはオーバーロードされた関数である。

QMultiMap<Key, T>::size_type QMultiMap::remove(const Key &key)

キーkey を持つすべてのアイテムをマルチマップから削除します。削除された項目の数を返します。

clear() およびtake()も参照

QMultiMap<Key, T>::size_type QMultiMap::remove(const Key &key, const T &value)

キーがkey で値がvalue であるすべての項目をマルチマップから削除します。削除された項目の数を返します。

clear() およびtake()も参照

[since 6.1] template <typename Predicate> QMultiMap<Key, T>::size_type QMultiMap::removeIf(Predicate pred)

マルチマップから述語pred が真を返す全ての要素を削除する。

この関数は、QMultiMap<Key, T>::iterator 型の引数か、std::pair<const Key &, T &> 型の引数を取る述語をサポートする。

もしあれば、削除された要素の数を返します。

この関数はQt 6.1で導入されました。

clear() とtake()も参照してください

QMultiMap<Key, T>::iterator QMultiMap::replace(const Key &key, const T &value)

キーがkey で値がvalue の新しい項目を挿入します。

すでにキーkey を持つ項目がある場合、その項目の値はvalue に置き換えられる。

キーkey を持つ項目が複数ある場合、最も最近挿入された項目の値がvalue に置換されます。

新しい/更新された要素を指すイテレータを返します。

insert()も参照してください

QMultiMap<Key, T>::size_type QMultiMap::size() const

マルチマップ内の (key, value) ペアの数を返します。

isEmpty() およびcount()も参照 ください。

[noexcept] void QMultiMap::swap(QMultiMap<Key, T> &other)

このマルチマップをother と入れ替える。この操作は非常に速く、失敗することはない。

T QMultiMap::take(const Key &key)

キーkey を持つ項目をマルチマップから削除し、それに関連付けられた値を返します。

その項目がマルチマップに存在しない場合、この関数は単にデフォルトで構成された値を返します。マップ内にkey の項目が複数ある場合は、最近挿入されたものだけが削除されて返されます。

戻り値を使用しない場合は、remove() の方が効率的です。

remove()も参照のこと

std::multimap<Key, T> QMultiMap::toStdMultiMap() const &

このQMultiMap と等価な STL マルチマップを返します。

QList<Key> QMultiMap::uniqueKeys() const

マップ内のすべてのキーを昇順に含むリストを返します。マップ内で複数回出現するキーは、返されるリスト内で一度だけ出現します。

QMultiMap<Key, T> &QMultiMap::unite(QMultiMap<Key, T> &&other)

other マップからこのマップにすべてのアイテムを移動する。キーが両方のマップに共通の場合、結果のマップにはそのキーが複数回含まれます。

other が共有されている場合は、代わりにアイテムがコピーされる。

QMultiMap<Key, T> &QMultiMap::unite(const QMultiMap<Key, T> &other)

other マップのすべての項目をこのマップに挿入します。キーが両方のマップに共通する場合、結果のマップにはそのキーが複数回含まれます。

QMultiMap<Key, T>::iterator QMultiMap::upperBound(const Key &key)

マップ内の最後のキーkey を持つアイテムの直後を指すイテレータを返す。マップにキーkey を持つ項目がない場合、この関数は、より大きなキーを持つ最も近い項目を指すイテレータを返します。

QMultiMap<int, QString> multimap;
multimap.insert(1, "one");
multimap.insert(5, "five");
multimap.insert(5, "five (2)");
multimap.insert(10, "ten");

multimap.upperBound(0);      // returns iterator to (1, "one")
multimap.upperBound(1);      // returns iterator to (5, "five")
multimap.upperBound(2);      // returns iterator to (5, "five")
multimap.lowerBound(5);      // returns iterator to (5, "five (2)")
multimap.lowerBound(6);      // returns iterator to (10, "ten")
multimap.upperBound(10);     // returns end()
multimap.upperBound(999);    // returns end()

lowerBound() およびfind()も参照

QMultiMap<Key, T>::const_iterator QMultiMap::upperBound(const Key &key) const

これはオーバーロードされた関数である。

T QMultiMap::value(const Key &key, const T &defaultValue = T()) const

キーkey に関連付けられた値を返す。

マルチマップにキーkey を持つ項目がない場合、この関数はdefaultValue を返します。defaultValue が指定されていない場合、この関数はデフォルトで構成された値を返します。マルチマップにkey の項目が複数ある場合、最も最近挿入された項目の値が返される。

key()、values()、contains()も参照

QList<T> QMultiMap::values() const

マップ内のすべての値をキーの昇順で含むリストを返します。キーが複数の値に関連付けられている場合は、 最近挿入された値だけでなく、すべての値がリストに含まれます。

keys() およびvalue()も参照 ください。

QList<T> QMultiMap::values(const Key &key) const

キーkey に関連付けられたすべての値を含むリストを返す。

keys() およびvalue()も参照

[default] QMultiMap<Key, T> &QMultiMap::operator=(QMultiMap<Key, T> &&other)

Move-other をこのQMultiMap インスタンスに割り当てる。

[default] QMultiMap<Key, T> &QMultiMap::operator=(const QMultiMap<Key, T> &other)

このマルチマップにother を割り当て、このマルチマップへの参照を返す。

関連する非会員

[since 6.1] template <typename Key, typename T, typename Predicate> qsizetype erase_if(QMultiMap<Key, T> &map, Predicate pred)

マルチマップmap から、述語pred が真を返すすべての要素を削除する。

この関数は、QMultiMap<Key, T>::iterator 型の引数か、std::pair<const Key &, T &> 型の引数を取る述語をサポートします。

もしあれば、削除された要素の数を返します。

この関数はQt 6.1で導入されました。

bool operator!=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

lhsrhs と等しくない場合はtrue を返し、そうでない場合はfalse を返す。

2つのマルチマップは、同じ(キー、値)ペアを同じ順序で含む場合、等しいとみなされる(これは、キーの重複に関係する)。

この関数は、operator==() を実装するためのキーと値の型を必要とする。

operator==()も参照

template <typename Key, typename T> QMultiMap<Key, T> operator+(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

rhs のすべての項目に加え、lhs のすべての項目を含むマップを返します。 キーが両方のマップに共通する場合、結果のマップにはそのキーが複数回含まれます。

operator+=()も参照

template <typename Key, typename T> QMultiMap<Key, T> operator+=(QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

rhs マップのすべての項目をlhs マップに挿入し、結果のマップを返す。

insert() およびoperator+()も参照

template <typename Key, typename T> QDataStream &operator<<(QDataStream &out, const QMultiMap<Key, T> &map)

マルチマップmap をストリームout に書き込む。

この関数は、キーと値の型がoperator<<() を実装している必要があります。

QDataStream 演算子のフォーマットも参照してください

bool operator==(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

lhsrhs と等しければtrue を返し、そうでなければ false を返す。

2つのマルチマップは、同じ(キー、値)ペアを同じ順序で含む場合、等しいとみなされます(これは、重複したキーの場合に重要です)。

この関数は、operator==() を実装するためのキーと値の型を必要とする。

operator!=()も参照

template <typename Key, typename T> QDataStream &operator>>(QDataStream &in, QMultiMap<Key, T> &map)

ストリームin からマップをmap に読み込む。

この関数は、operator>>() を実装するために、キーと値の型を必要とします。

QDataStream 演算子のフォーマットも参照してください

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.