richvote
@richvote

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Swift版chminを実装したい。

解決したいこと

Swiftで競技プログラミングでよく用いられるテンプレートのchminとchmaxを
作りたいのですが、うまく行きません。どなたか教えて下さい。

// aよりもbが大きいならばaをbで更新する
// (更新されたならばtrueを返す)
template <typename T>
bool chmax(T &a, const T& b) {
  if (a < b) {
    a = b;  // aをbで更新
    return true;
  }
  return false;
}
// aよりもbが小さいならばaをbで更新する
// (更新されたならばtrueを返す)
template <typename T>
bool chmin(T &a, const T& b) {
  if (a > b) {
    a = b;  // aをbで更新
    return true;
  }
  return false;
}

自分で試したこと

Swiftでもポインタが使えるかなと思ったら、うまく行きませんでした。

import Foundation

func chmin<T:Comparable>(_ a:UnsafeMutablePointer<T>,_ b:UnsafeMutablePointer<T>){
    if &a > &b {
        &a = &b
    }
}
0

2Answer

Comments

  1. @richvote

    Questioner

    ありがとうございました。大変助かりました。

自分は下記を使ってます。

@inlinable @discardableResult func chmax<T: Comparable>(_ m: inout T, _ q: T) -> Bool { if (m < q) { m = q; return true } else { return false } }
@inlinable @discardableResult func chmin<T: Comparable>(_ m: inout T, _ q: T) -> Bool { if (m > q) { m = q; return true } else { return false } }
0Like

Comments

  1. @richvote

    Questioner

    ありがとうございました。大変助かりました。

Your answer might help someone💌