Sudoku solution without the use of classes
I see some things that may help you improve your code.

Don't abuse using namespace std

Putting using namespace std within your program is generally a bad habit that you'd do well to avoid.  

The comment in the code seems to indicate you know this and can't change it for some reason, but others who may read this question and answer may benefit 

Simplify your code

The current code has this function:

bool is_valid_sdk(const sdk&amp; v)
{
  if (not has_valid_rows(v))   return false;
  if (not has_valid_cols(v))   return false;
  if (not has_valid_blocks(v)) return false;
  return true;
}


However, this could be considerably shorter and easier to read and understand if written like this:

bool is_valid_sdk(const sdk&amp; v)
{
  return has_valid_rows(v) and has_valid_cols(v) and has_valid_blocks(v);
}


Reconsider the design

Although the current code works, it's not very efficient in that it makes a copy of each vector in order to check it.  An alternative approach would be to allow checking in place without making a copy.  One way to do that would be to separate the iteration through the rows/columns/blocks into a separate function that could be passed to the is_permutation function.  For example:

bool is_permutation(const sdk&amp; v, int x, int y, 
                    int(*next)(const sdk&amp; v, int&amp; x, int&amp; y))
{
  vector&lt;bool&gt; used(sdk_size, false);
  for (int i = 0; i &lt; sdk_size; ++i) {
    int val = next(v, x, y);
    if (val &lt; 1 or val &gt; sdk_size or used[val-1]) {
      return false;
    }
    used[val-1] = true;
  }
  return true;
}

int next_in_blk(const sdk&amp; v, int &amp;x, int &amp;y) 
{
    int val = v[x][y];
    if (++y % sdk_blocks == 0) {
        y -= sdk_blocks;
        ++x;
    }
    return val;
}

bool has_valid_blocks(const sdk&amp; v)
{
  for (int i = 0; i &lt; sdk_size; ++i) {
    int x = sdk_blocks * (i / sdk_blocks);
    int y = sdk_blocks * (i % sdk_blocks);
    if (not is_permutation(v, x, y, next_in_blk)) return false;
  }
  return true;
}


The corresponding functions for row and col are even simpler.