このページでは

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 の比較

カテゴリ比較可能な型
等価性QMultiMap

パブリック型

パブリック関数

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)
(since 6.12) bool operator<(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QDataStream &operator<<(QDataStream &out, const QMultiMap<Key, T> &map)
(since 6.12) bool operator<=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
(since 6.12) auto operator<=>(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
bool operator==(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
(since 6.12) bool operator>(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
(since 6.12) bool operator>=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QDataStream &operator>>(QDataStream &in, QMultiMap<Key, T> &map)

詳細な説明

QMultiMap<KEY, T> は Qtのジェネリックコンテナクラスの一つであり、Key は検索キーとして使用される型、T はマッピングされる値の型です。これは (キー, 値) のペアを格納し、キーによる高速な検索を可能にします。

QMultiMap とQMultiHash は非常に類似した機能を提供します。違いは以下の通りです。

  • QMultiHash xml-ph-0000@deepl.internalは、QMultiMapよりも平均して高速な検索を提供します。(詳細については、「アルゴリズムの計算量」を参照してください。)
  • QMultiHash を反復処理する場合、項目の順序は任意です。一方、QMultiMap では、項目は常にキー順にソートされています。
  • QMultiHash のキー型は、operator==() およびグローバル関数qHash(Key) を実装している必要があります。QMultiMapのキー型は、全順序を指定するoperator<() を実装している必要があります。Qt 5.8.1以降では、基になるoperator<()が全順序を提供していない場合でも、ポインタ型をキーとして安全に使用できます。

以下に、QString をキーとし、int を値とするQMultiMapの例を示します:

QMultiMap<QString, int> multimap;

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

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

これにより、次の4つの(key, value)ペアがQMultiMapに挿入されます: ("a", 1), ("b", 3), ("c", 7), および ("c", -5)。キーの重複は許容されることに注意してください。

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

int num2 = multimap.value("a"); // 1
int num3 = multimap.value("thirteen"); // not found; 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();

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

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

QMultiMapに格納されているすべての(キー, 値)のペアを順に処理したい場合は、イテレータを使用できます。QMultiMapは、Javaスタイルのイテレータ(QMultiMapIterator およびQMutableMultiMapIterator )とSTLスタイルのイテレータ(QMultiMap::const_iterator およびQMultiMap::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 では、1 つのキーに対して複数の値を保持できます。マップ内にすでに存在するキーで `insert()` を呼び出すと、新しい (キー, 値) のペアが挿入されます。例:

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;

同じキーを持つ項目は、挿入された順に新しいものから古いものの順に取得できます。別の方法として、find() を呼び出して、そのキーを持つ最初の項目に対する STL スタイルのイテレータを取得し、そこから反復処理を行うこともできます:

auto i = multimap.find("plenty");
while (i != multimap.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;

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

unite() を呼び出す、演算子 +() を使用する、または演算子 +=() を使用することで、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 < y もy < x も真でない場合、2つのキーx とy は等しいとみなします。

例:

#ifndef EMPLOYEE_H
#define EMPLOYEE_H

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

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

この例では、まず従業員の名前を比較します。名前が等しい場合は、生年月日を比較して同順位を解消します。

関連項目 :QMultiMapIterator 、QMutableMultiMapIterator 、およびQMultiHashも参照してください 。

メンバ型のドキュメント

QMultiMap::ConstIterator

QMultiMap::const_iterator のQtスタイルの同義語。

QMultiMap::Iterator

QMultiMap::iterator の Qt スタイルの同義語。

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 の typedef。STL との互換性を確保するために用意されています。

[alias] QMultiMap::key_type

Key の typedef。STL との互換性のために用意されています。

QMultiMap::key_value_iterator

QMultiMap::key_value_iterator の typedef は、QMultiMap 用の STL スタイルのイテレータを提供します。

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

QKeyValueIteratorも参照してください 。

[alias] QMultiMap::mapped_type

T の typedef。STL との互換性を確保するために用意されています。

[alias] QMultiMap::size_type

int の typedef。STL との互換性を確保するために用意されています。

メンバ関数のドキュメント

[default] 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()も参照してください 。

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

other のコピーを作成します。

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

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

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

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

[implicit] QMultiMap::~QMultiMap()

マルチマップを破棄します。マルチマップ内の値への参照、およびこのマルチマップに対するすべての反復子は無効になります。

[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<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 スタイルのconstイテレータを返します。

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

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

マルチマップの最後の項目の直後に位置する仮想の項目を指す、STL スタイルのconstイテレータを返します。

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

void QMultiMap::clear()

マルチマップからすべての項目を削除します。

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

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

マルチマップの最初の要素を指す、STL スタイルのconstイテレータを返します。

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

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

マルチマップの最後の要素の直後に存在する架空の要素を指す、STL スタイルのconstイテレータを返します。

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

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

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

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

find() およびQMultiMap::constFind(const Key &key, const T &value)も参照してください 。

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 スタイルのconstイテレータを返します。

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

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

マルチマップの最後のエントリの直後に位置する仮想のエントリを指す、STL スタイルのconstイテレータを返します。

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(const Key &key, const T &value)も参照してください 。

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()と同等であり、マップが空の場合はtrueを返し、それ以外の場合はfalseを返します。

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 ` が指す (キー, 値) のペアをマルチマップから削除し、マップ内の次の項目へのイテレータを返します。

注: イテレータ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) が指す (キー, 値) のペアを、マルチマップから削除します。削除された最後の要素の直後に続くマルチマップ内の項目へのイテレータを返します。

注: 範囲[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 != multimap.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

マップ内の、指定されたkey およびvalue を持つ項目を指すconstイテレータを返します。

マップにそのような項目が含まれていない場合、この関数は `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()` とは異なります。)

QMultiMap 重複するキーを許可し、項目はキーの昇順で格納されます。キーが重複する場合、値は挿入順の逆順で格納されます(最も最近に挿入された値が先頭になります)。

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

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 が間違っている場合は、それは無視され、通常の挿入が行われます。

ヒントが正しく、マルチマップが共有されていない場合、挿入は償却定数時間で実行されます。

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

ソート済みのデータからマルチマップを作成する場合、constBegin() を使用して最大のキーを最初に挿入する方が、constEnd() を使用してソート順に挿入するよりも高速です。これは、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 スタイルのconstイテレータを返します。

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

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

マルチマップの最後のキーの後に位置する仮想の項目を指す、STL スタイルのconstイテレータを返します。

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

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

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

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

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

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

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

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

マルチマップの最後のエントリの直後に位置する仮想のエントリを指す、STL スタイルのイテレータを返します。

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

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

マルチマップの最後のエントリの直後に位置する仮想のエントリを指す、STL スタイルのconstイテレータを返します。

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 という述語が true を返すすべての要素を、マルチマップから削除します。

この関数は、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

マルチマップ内の(キー、値)のペアの数を返します。

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

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

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

マップ内のすべての値を、キーの昇順で並べたリストを返します。1つのキーに複数の値が関連付けられている場合、その値はすべてリストに含まれ、最後に挿入された値だけが含まれるわけではありません。

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

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

キー `key` に関連付けられたすべての値を、最も新しく挿入されたものから最も古いものへと順に並べたリストを返します。

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

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

other をこのQMultiMap インスタンスに移動・割り当てます。

[implicit] 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)

lhs がrhs と等しくない場合は、true を返します。それ以外の場合は、false を返します。

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

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

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

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

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

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

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

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

insert() およびoperator+()も参照してください 。

[since 6.12] bool operator<(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

lhs がrhsより辞書順で小さい場合はtrue を返し、そうでない場合はfalse を返します。

この演算子は、キー型Key とマッピング型T の両方が、operator<=>() (C++20 モードの場合)、compareThreeWay() ヘルパーメソッド、またはoperator<() のいずれかを提供している場合に利用可能です。

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

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

マルチマップ `map ` をストリーム `out` に書き込みます。

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

QDataStream 演算子の形式も参照してください 。

[since 6.12] bool operator<=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

lhs がrhsよりも辞書順で小さいか等しい場合はtrue を返し、それ以外の場合はfalse を返します。

この演算子は、キー型Key とマッピング型T の両方が、operator<=>() (C++20 モードの場合)、compareThreeWay() ヘルパーメソッド、またはoperator<() のいずれかを提供している場合に利用可能です。

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

[since 6.12] auto operator<=>(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

lhs とrhs の内容を辞書順で比較します。適用可能なカテゴリ型の中で最も強いものの結果を返します。

注:この演算子は 、キー型Key とマッピング型T の両方が、std::three_way_comparable コンセプトの要件を満たすか、operator<() を提供する場合にのみ、C++20 モードで利用可能です。この場合、< 、<= 、> 、および>= 演算子は、operator<=>() およびoperator==() から合成されます。

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

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

lhs がrhs と等しい場合は `true ` を返し、そうでない場合は `false` を返します。

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

この関数を使用するには、キーおよび値の型が `operator==()` を実装している必要があります。

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

[since 6.12] bool operator>(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

lhs がrhsより辞書順で大きい場合はtrue を返し、そうでない場合はfalse を返します。

この演算子は、キー型 `Key ` とマッピング先型 `T ` の両方が、`operator<=>() `(C++20 モードの場合)、`compareThreeWay() ` ヘルパーメソッド、または `operator<()` のいずれかを提供している場合に利用可能です。

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

[since 6.12] bool operator>=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

lhs がrhsより辞書順で大きいか等しい場合はtrue を返し、それ以外の場合はfalse を返します。

この演算子は、キー型Key とマップ先型T の両方が、operator<=>() (C++20 モードの場合)、compareThreeWay() ヘルパーメソッド、またはoperator<() のいずれかを提供している場合に利用可能です。

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

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

ストリーム `in ` からマップを読み取り、`map` に格納します。

この関数を使用するには、キーおよび値の型がoperator>>() を実装している必要があります。

QDataStream 演算子の形式も参照してください 。

© 2026 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.